第N個泰波拉契數

2021-10-10 17:29:59 字數 2424 閱讀 5155

題目描述

泰波那契序列 tn 定義如下:

t0 = 0, t1 = 1, t2 = 1, 且在 n >= 0 的條件下 tn+3 = tn + tn+1 + tn+2

給你整數 n,請返回第 n 個泰波那契數 tn 的值。

輸入:n = 4

輸出:4

解釋:t_3 = 0 + 1 + 1 = 2

t_4 = 1 + 1 + 2 = 4

示例 2:

輸入:n = 25

輸出:1389537

0 <= n <= 37

答案保證是乙個 32 位整數,即 answer <= 2^31 - 1。

題解

主程式

public

class

tribonaccic

}

①我自己寫的,執行超時了,無法在力扣提交,因為重複計算了

class

solution

else

if(n==1)

else

if(n==2)

else

}}

1389537
②下面是在討論區找到的**

class

solution2

if(n ==

1|| n ==2)

int result =0;

int a =0;

int b =1;

int c =1;

for(

int i =

3; i <= n; i++

)return result;

}}

1389537
③尾遞迴

public

static

inttri

(int n,

int res1,

int res2,

int res3)

return

tri(n -

1, res2, res3, res1 + res2 + res3)

;}

1389537
④直接用遞迴的話會超時,所以應該減小遞迴的次數,對於通項公式進一步推導

t(n+3) = t(n+2) + t(n+1) +t(n+0)

t(n+4) = t(n+3) + t(n+2) + t(n+1)

兩者相減

t(n+4) - t(n+3) = t(n+3) - t(n)

移項可得t(n+4) = 2t(n+3) - t(n)

故有t(n) = 2t(n-1) - t(n-4)

public

static

inttribonacci2

(int n)

}

1389537
class

solution3

return prev;

}}

1389537
class

solution4

else

if(n ==1)

else

if(n ==2)

else

;for

(int i =

3; i <= n; i++

)return array[n %3]

;}}}

1389537
⑦動態規劃

class

solution5

return f[n];}

}

1389537
⑧遞迴加dp

題目給出了遞推式,很容易想到用自頂向下的遞迴寫法,把遞迴式改為:tn = tn-3 + tn-2 + tn-1

但是一提交發現超時,原因是這個遞推式用到了前三項的和,而每次求前三項的時候都是從頭開始遞迴求,顯然做了很多重複操作。

所以用到了dp陣列訪問之前求過的結果,當下次要的時候直接取

5139 第 N 個泰波那契數

泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。示例 1 輸入 n 4輸出 4 解釋 t 3 0 1 1 2t 4 1 1 2 4示例 2 輸入 n 25輸出 1389537...

遞迴2 第 N 個泰波那契數

泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。示例 1 輸入 n 4 輸出 4 解釋 t 3 0 1 1 2 t 4 1 1 2 4 示例 2 輸入 n 25 輸出 138...

求第n個斐波拉契數

首先介紹斐波那契數列,斐波那契數列的排列是 1,1,2,3,5,8,13,21,34,55,89,144 依次類推下去,你會發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。如果要找出其中任意乙個數,可以用下面兩種演算法解決 用遞迴法 define crt secure n...