利用動態規則的思路,摒棄傳統的遞迴做法,可以得到一種快速的求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...