六、 递归和迭代

一、 递归和迭代的区别

我在刚刷LeetCode的时候,在一道有关循环的题目的评论下面看到这样一句话,"迭代是人,递归是神"。

同时用递归方法解体很多时候确实不好想,所以当时我觉得递归非常NB,但是在经过一段时间的学习后,尤其是当开始考虑算法的效率的时候,我发现递归也是有很多缺点和限制的。

  1. 区别一:递归代码看起来简洁
  2. 区别二:递归的实现效率比不上循环
  3. 区别三:递归更容易出现栈溢出问题

二、斐波那契数列

2.1 递归方法解决

c++ 复制代码
class Solution {
public:
    int fib(int n) {
        if (n==0) return 0;
        else if (n==1) return 1;
        else return fib(n-1) + fib(n-2);
    }
};

代码看起来很简洁吧,但是如果n稍微大一点,代码直接报错

迭代方式解决

c++ 复制代码
class Solution {
public:
    int fib(int n) {
        if (n==0) return 0;
        else if (n==1) return 1;
        else {
            int MOD = 1000000007;
            int last_sum = 0;
            int p = 0, q = 0, r = 1;
            for(int i = 2; n>=i; i++){
                p = q;
                q = r;
                r = (p + q)%MOD;
            }
            return r;
        }
    }
};
相关推荐
Raink老师3 小时前
【AI面试临阵磨枪-79】实时数据 RAG:订单、商家、物流、天气、动态库存
人工智能·面试·职场和发展
Cosolar3 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
kkeeper~4 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
wabs6665 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964136 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚6 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov8 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫8 小时前
特征工程处理
人工智能·算法·机器学习
秦明月138 小时前
电芯装配测试线安全回路设计实战
经验分享·其他·职场和发展·创业创新·学习方法