六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
小宇的天下22 分钟前
Calibre LVS Circuit Comparison(2)
算法·lvs
迈巴赫车主1 小时前
求最大公约数-欧几里得算法(辗转相除法)
算法·最大公约数
测试19981 小时前
Python+Excel读取和存储测试数据完成接口自动化测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
lxl13071 小时前
C++算法(15)BFS_FloodFill
算法·宽度优先
小王C语言1 小时前
【基础IO】————简单设计一下libc库
前端·数据结构·算法
亦复何言??1 小时前
BeyondMimic 论文解析
人工智能·算法·机器人
WolfGang0073211 小时前
代码随想录算法训练营 Day20 | 回溯算法 part02
算法
YXXY3131 小时前
前缀和算法
算法
客卿1231 小时前
滑动窗口--模板
java·算法
_日拱一卒1 小时前
LeetCode:滑动窗口的最大值
数据结构·算法·leetcode