一種快速求fibonacci第n個數的演算法

2022-01-22 12:13:47 字數 773 閱讀 5194

利用動態規則的思路,摒棄傳統的遞迴做法,可以得到一種快速的求fibonacci第n個數的演算法:

'''

求第n(從1開始)位fibonacci數

fibonacci數列前兩位為0, 1. 後面每一位數字等於前兩位數字之和

'''def

fibonacci( n ):

if n <= 2:

return n - 1f =0

g = 1

while n - 2 >0:

g = g +f

f = g -f

n -= 1

return

gprint( fibonacci( 100 ) )

'''

與上述函式等價的遞迴寫法

'''def

fib_iter( f, g, n ):

if n <=0:

return

g

else

:

return fib_iter( g, f + g, n - 1)

deffib( n ):

if n <= 2:

return n - 1

return fib_iter( 0, 1, n - 2)

print( fib( 100 ) )

兩者原理一樣, 但遞迴形式在計算fib(1000)的時候就超出python最大遞迴數量了, 所以推薦迴圈寫法.

結果是218922995834555169026

一種快速求組合數的方法

介紹一種快速求 dbinom 的方法。其實就是根據定義來做的做法 我們知道 dbinom mod 1e9 7 frac mod 1e9 7 為方便表達,我們設 x n times n 1 times dots times n m 1 即右邊的分子 y 1 times 2 times dots tim...

Fibonacci數列的一種經典遞迴實現

剛才.net課程期末考試,正好最後一題考的是遞迴實現fibonacci數列.順便就把 打出來發在這裡.雖然沒什麼技術含量 wink 主要特性就是使用buffer將先前已經計算過的fibonacci數列的值儲存下來,減少遞迴時的重複計算開銷.c 沒直接的lazy evaluation,這種採取buff...

一種快速排序演算法

using system class program for int l 0 l src.length l src count temp l i 3 0xff temp l static void main string args watch.stop console.writeline quick...