「斐波那契數列」衍生題

2022-05-29 20:09:12 字數 1462 閱讀 2543

斐波那契數列是這樣的一組數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:f(1)=1,f(2)=1, f(n)=f(n-1)+f(n-2)(n>=3,n∈n*)即大於2的部分是由前兩個相加獲得。

若要求第 n 個數的值,我們可以用遞迴也可以通過迭代的方式求解

1、遞迴

def

fibonacci(n):

if n == 1 or n == 2:

return 1

return fibonacci(n - 1) + fibonacci(n - 2)

2、迭代

def

fibonacci(n):

dic =dict()

dic[1] = 1dic[2] = 2

for i in range(2, n+1):

dic[i] = dic[i-1] + dic[i-2]

return dic[n]

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

想象一下,我們從最頂層的台階開始算起,在最頂層,能夠用一次走完的,可能最後只剩乙個台階,也可能只剩兩個台階。然後除去最頂層這乙個或者兩個台階,剩下的也是這樣,一直迴圈下去,是不是最後就到了底層?也就是方式不斷地往上加,類似斐波那契數列。

說得可能有點亂,我們通過數學歸納法驗證一下:乙個台階,跳一次;兩個台階,可以跳一次,也可以分兩階跳,總共兩種;三個台階,有三種方式;四個台階,有五種......這樣看是不是就是斐波那契數列。那麼通過程式設計地方式,參照上面地**。

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

這道題跟上一道題地不同就在於沒有了一次跳多少階的條件。

f(1) = 1

f(2) = f(2-1) + f(2-2)         

f(3) = f(3-1) + f(3-2) + f(3-3) 

其中 f(n-m) 表示 n 階一次跳 m 階的次數。

f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)   ①

f(n-1) = f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)      ②

① - ② 得:f(n) = 2 x f(n-1)

因此**如下:

def

jumpfloorii(number):

#write code here

if number == 0 or number == 1:

return 1

return jumpfloorii(number - 1) * 2

當作筆記,寫得一般,見笑了。

斐波那契數列衍生演算法題

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。首先我們最快想到的實現方式就是遞迴 f 1 1 f 2 2 f n f n 1 f n 2 複製 func climbstairs n int int i...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...