题目
链接
LeetCode 509[斐波那契数]
详情
实例
提示
题解
思路
递归求值,但是吧,如果是用递归的话有可能会造成内存超出限制的错误,当然我不能确定会不会报此错误,因为我没有试过
此处我是用循环代替递归的
n为0时,fn为0
n为1时,fn为1
n为2时,fn为 fn_1+fn_2 = 0 + 1 = 1
n为3时,fn为 fn_1+fn_2 = 1 + 1 = 2
n为4时,fn为 fn_1+fn_2 = 1 + 2 = 3
n为5时,fn为 fn_1+fn_2 = 2 + 3 = 5
蓝色部分是在循环外面进行的,也就是:
当n为0时,直接返回0
当n为1时,直接返回1
红色部分是在循环内进行的,也就是开始递归了:
设定 i 的初始值为 2
则此时 fi_1 的值为 f1 的值,fi_2 的值为 f0 的值,此时可以求出 fi 的值
然后再将 fi_1 的值赋给 fi_2,将 fi 的值赋值 fi_1,再通过 fi = fi_1 + fi_2 来求取 fi 的值
直到 i 为 n,计算出 fn 的值后退出循环并返回 fn
代码
class Solution {
public:int fib(int n) {if (0 == n)return 0;if (1 == n)return 1;int f_2 = 0, f_1 = 1;int iRet = 0;for (int i = 2; i < n + 1; i++){iRet = f_1 + f_2;f_2 = f_1;f_1 = iRet; }return iRet;}
};
类似题目
LeetCode 1137[第N个泰波那契数] 题目
类似题解
LeetCode 1137[第N个泰波那契数] 题解