題目
連結
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個泰波那契數] 題解