題目
連結
LeetCode 1137[第N個泰波那契數]
詳情
例項
例項1
例項2
提示
題解
思路一[遞迴]
當 n 為 0, 1, 2 時,直接返回對應的值
當 n 大於 2 時,開始用 f(n+3) = f(n) + f(n+1) + f(n+2) 來遞迴求值
程式碼一[此程式碼在力扣會超出時間限制]
class Solution {
public:
int tribonacci(int n) {
if (0 == n)
return 0;
if ((1 == n) || (2 == n))
return 1;
return tribonacci(n - 3) + tribonacci(n - 2) + tribonacci(n - 1);
}
};
思路二[迴圈代替遞迴]
當 n 為 0, 1, 2 時,直接返回對應的值
當 n 大於 2 時,開始用 f(n+3) = f(n) + f(n+1) + f(n+2) 來遞迴求值
由於遞迴是不停的複製貼上,在執行時需要大量的時間,當 n 數值過大時,就會超過力扣官方限制的時間
因此此處採用迴圈代替遞迴的方法
此處的迴圈體為: f(n+3) = f(n) + f(n+1) + f(n+2)
迴圈由 3 開始,由 n 結束,依次進入迴圈體求值,直到求出最後的 f(n) 的值並返回
程式碼二[此為成功程式碼]
class Solution {
public:
int tribonacci(int n) {
if (0 == n)
return 0;
if ((1 == n) || (2 == n))
return 1;
int a0 = 0, a1 = 1, a2 = 1;
int iRet = 0;
for (int i = 3; i < n + 1; i++)
{
iRet = a0 + a1 + a2;
a0 = a1;
a1 = a2;
a2 = iRet;
}
return iRet;
}
};