python3 題解(2 斐波那契數列)

2021-09-26 14:25:42 字數 1692 閱讀 8621

【問題】 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 ...