六、 递归和迭代

一、 递归和迭代的区别

我在刚刷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;
        }
    }
};
相关推荐
羊小猪~~18 分钟前
LLM--微调(Adapters,Prompt,Prefix)
算法·ai·大模型·llm·prompt·adapters·prefix
未来之窗软件服务24 分钟前
SenseVoicecpp ggml-hexagon.cpp大模型[AI人工智能(七十九)]—东方仙盟
人工智能·算法·仙盟创梦ide·东方仙盟
xiaoye-duck25 分钟前
《算法题讲解指南:动态规划算法--子数组系列》--25.单词拆分,26.环绕字符串中唯一的子字符串
c++·算法·动态规划
Fcy64829 分钟前
算法基础详解(二)枚举算法——普通枚举与二进制枚举
算法·枚举算法
承渊政道44 分钟前
【优选算法】(实战:栈、队列、优先级队列高频考题通关全解)
数据结构·c++·笔记·学习·算法·leetcode·宽度优先
py有趣1 小时前
力扣热门100题之将有序数组转为二叉搜索树
算法·leetcode
天若有情6731 小时前
Python精神折磨系列(完整11集·无断层版)
数据库·python·算法
凌波粒1 小时前
LeetCode--383.赎金信(哈希表)
java·算法·leetcode·散列表
xiaoye-duck1 小时前
《算法题讲解指南:动态规划算法--子数组系列》--23.等差数列划分,24.最长湍流子数组
c++·算法·动态规划
派大星~课堂1 小时前
【力扣-141. 环形链表 ✨】Python笔记
笔记·leetcode·链表