斐波那契數列是這樣的一組數列: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、遞迴
deffibonacci(n):
if n == 1 or n == 2:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
2、迭代
deffibonacci(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)
因此**如下:
defjumpfloorii(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級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...