六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
冻感糕人~3 分钟前
大模型面试干货:小白程序员如何准备,轻松拿下高薪Offer?收藏这份独家秘籍!
java·人工智能·学习·ai·面试·职场和发展·大模型学习
多加点辣也没关系4 分钟前
数据结构与算法|第十一章:跳表
数据结构·算法
风筝在晴天搁浅17 分钟前
字节/蚂蚁/美团/拼多多 LeetCode 165.比较版本号
java·leetcode
晚风叙码19 分钟前
归并排序:从原理到非递归实现,一文搞定
数据结构·算法
悲伤小伞19 分钟前
LeetCode 热题 100_3-128. 最长连续序列
c++·算法·leetcode·哈希算法
多加点辣也没关系22 分钟前
数据结构与算法|第十三章:递归与分治
数据结构·算法
EXnf1SbYK38 分钟前
Redis分布式锁进阶第十四篇:分布式锁常见高频面试压轴题 + 线上踩坑标准答案 + 架构师高分收口
面试·职场和发展
m0_629494731 小时前
LeetCode 热题 100-----21.搜索二维矩阵 II
数据结构·算法·leetcode
平行侠1 小时前
018二进制GCD(Stein算法)- 用位运算代替除法的最大公因数
数据结构·算法
月疯1 小时前
卡尔曼滤波的数学计算流程
算法