六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
王老师青少年编程5 分钟前
csp信奥赛c++高频考点假期集训(分模块进阶)
数据结构·c++·算法·csp·高频考点·信奥赛·集训
癫狂的兔子2 小时前
【Python】【机器学习】K-MEANS算法
算法·机器学习·kmeans
Bear on Toilet2 小时前
递归_二叉树_50 . 从前序与中序遍历序列构造二叉树
数据结构·算法·leetcode·深度优先·递归
plus4s2 小时前
2月18日(82-84题)
c++·算法·动态规划
艾醒3 小时前
打破信息差——2026年2月19日AI热点新闻速览
算法
追随者永远是胜利者4 小时前
(LeetCode-Hot100)62. 不同路径
java·算法·leetcode·职场和发展·go
追随者永远是胜利者4 小时前
(LeetCode-Hot100)56. 合并区间
java·算法·leetcode·职场和发展·go
wu_asia4 小时前
每日一练伍
算法
追随者永远是胜利者4 小时前
(LeetCode-Hot100)55. 跳跃游戏
java·算法·leetcode·游戏·go
近津薪荼5 小时前
优选算法——前缀和(7):连续数组
算法