一、 递归和迭代的区别
我在刚刷LeetCode的时候,在一道有关循环的题目的评论下面看到这样一句话,"迭代是人,递归是神"。
同时用递归方法解体很多时候确实不好想,所以当时我觉得递归非常NB,但是在经过一段时间的学习后,尤其是当开始考虑算法的效率的时候,我发现递归也是有很多缺点和限制的。
- 区别一:递归代码看起来简洁
- 区别二:递归的实现效率比不上循环
- 区别三:递归更容易出现栈溢出问题
二、斐波那契数列
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;
}
}
};