六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
The_Ticker2 分钟前
日股实时行情接口使用指南
java·经验分享·笔记·python·算法·区块链
靠沿3 分钟前
【递归、搜索与回溯算法】专题一——递归
算法
凌波粒4 分钟前
LeetCode--24.两两交换链表中的节点(链表)
java·算法·leetcode·链表
猫咪老师5 分钟前
RAG与GraphRAG介绍
人工智能·算法·llm
qwehjk200814 分钟前
实时语音处理库
开发语言·c++·算法
2301_8042154117 分钟前
自定义异常类设计
开发语言·c++·算法
暮冬-  Gentle°18 分钟前
C++代码依赖分析
开发语言·c++·算法
2301_7638919521 分钟前
泛型编程与STL设计思想
开发语言·c++·算法
j_xxx404_23 分钟前
蓝桥杯基础--进制转换
开发语言·数据结构·c++·算法·职场和发展·蓝桥杯
阿Y加油吧32 分钟前
力扣链表高频题:两两交换节点 + K个一组翻转链表(保姆级思路+满分代码)
算法·leetcode·链表