六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
ccLianLian18 分钟前
算法·字符串哈希
算法·哈希算法
SongYuLong的博客21 分钟前
Linux IPC进程通信几种方法
linux·运维·算法
像污秽一样23 分钟前
算法设计与分析-习题6.1
数据结构·算法
北京地铁1号线31 分钟前
8.2 对比学习的损失函数
算法·机器学习·损失函数·对比学习
样例过了就是过了38 分钟前
LeetCode热题100 分割回文串
数据结构·c++·算法·leetcode·深度优先·dfs
带娃的IT创业者1 小时前
WeClaw 心跳与重连实战:指数退避算法如何让 WebSocket 在弱网环境下的连接成功率提升 67%?
python·websocket·网络协议·算法·fastapi·实时通信
Morwit1 小时前
【力扣hot100】 85. 最大矩形
c++·算法·leetcode·职场和发展
艾醒2 小时前
MiniMax M2.5:从黑马到全球顶流的"前世今生"与趣闻
算法
m0_528174452 小时前
C++中的代理模式变体
开发语言·c++·算法
2401_883035462 小时前
C++代码风格检查工具
开发语言·c++·算法