【問題】 1,1,2,3,5,8,13,… 稱為斐波那契數列。它的每一項都是前兩項的和。
程式設計求斐波那契數列的第n項。
這個問題不太困難,可以有很多的解法。
最容易想到的是:弄乙個陣列,前頭兩個元素裝上1,1, 後邊的逐項計算就行。
def
fib(n)
: a =[1
,1]for i in
range
(n-2):
1]+ a[i]
)return a[n-1]
if __name__ ==
'__main__'
:print
([fib(x)
for x in
range(1
,11)]
)print
(fib(35)
)
可以工作,下標的仔細計算有點頭疼。
聽說遞迴可以簡潔,先來個:
def
fib(n)
:if n <3:
return
1return fib(n-1)
+ fib(n-2)
if __name__ ==
'__main__'
:print
([fib(x)
for x in
range(1
,11)]
)print
(fib(35)
)
確實,赤裸裸地表達了數列的初始定義。
但,有個大弱點,重複計算太多,當數大的時候快速變慢。
實際上弄2個變數,來回加法就行。
def
fib(n)
: a, b =0,
1for i in
range
(n):
a, b = b, a + b
return a
if __name__ ==
'__main__'
:print
([fib(x)
for x in
range(1
,11)]
)print
(fib(35)
)print
(fib(
100)
)
有偏愛作死的,還可以用生成器
物件。
def
fib():
a, b =0,
1while
true
: a, b = b, a + b
yield a
if __name__ ==
'__main__'
:for i,v in
zip(
range(1
,20), fib())
:print
(i,v)
這個 fib() 函式可不是返回普通的值。它會返回乙個「迭代器」物件,這個物件支援next方法,返回 fib 定義中每次的yield 吐出的值。
迭代器物件支援 iterable 介面。因而可用於 for zip 等很多需要 iterable 的場合。
需要補基礎的,可以看:小甲魚pyhthon教程,bilibili站上還有:[耿老師]小甲魚python作業 解析系列,持續更新中。
斐波那契數 python
def f x if x 0or x 1 return 1else return f x 1 f x 2 cal time 裝飾器 確定執行時間 deffib n return f n print fib 30 給遞迴函式加裝飾器,會出現重複列印 重新定義乙個函式,呼叫,這樣就不會重複列印fib r...
斐波那契數
入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...
斐波那契數
斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...