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;
}
};
类似题目
类似题解
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18586858