python中生成斐波拉契數列的方法

2021-08-08 15:23:57 字數 2400 閱讀 5093

斐波那契數列(fibonacci sequence),又稱**分割數列、因數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:f(0)=0,f(1)=1, f(n)=f(n-1)+f(n-2)(n>=2,n∈n*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1963起出版了以《斐波納契數列季刊》為名的乙份數學雜誌,用於專門刊載這方面的研究成果。

其實就是從第三項開始,每項的值等於前兩項的和。我們來看下面一道常見的面試題:

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

只有一級台階時,1;

有兩節台階的時候有兩種跳法,11和2;

有三節台階的時候有三種跳法,111、12、21

有四階台階的時候,有五種跳法,1111、112、121、22、211

......

fib = lambda n: n if n <= 2 else fib(n - 1) + fib(n - 2)
通過執行》fib(n) 來輸出斐波拉契數列第n項的值。

也可以通過 listdata = [fib(i) for i in range(1,n)]來生成斐波拉契數列前n項的值,最後通過print listdata可以列印出結果。

對於裝飾器,這裡暫時不做過多的解析,請大家暫時自行查閱學習。

效果圖:

執行效果圖:

這裡我用的是python3,python2需要修改__next__(self):方法,其實生成的是乙個無限迴圈的迭代器,也可以使用

itertools模組把無限迭代器轉為有限迭代器。

from itertools import islice

class fib:

def __init__(self):

self.prev = 0

self.curr = 1

def __iter__(self):

return self

def __next__(self):

value = self.curr

self.curr += self.prev

self.prev = value

return value

>>> f = fib()

>>> list(islice(f, 0, 10))

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

但是這種方法不能單獨取出第n項的值。不建議用這種方法實現斐波拉契數列,但是可以作為一種裝逼的方式,在面試的時候可以給你增加點分數,其實就是迭代器的使用方式。

斐波拉契數列 Python

斐波拉契數列 這個數列從第三項開始,每一項都等於前兩項之和 題目內容 已知斐波拉契數列的前兩項都是1,我們定義求斐波拉契數列的第n項 n 50 的函式為fbnq,程式主體如下 n int input print fbnq n 請補充完成對fbnq函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 ...

python數列 Python斐波拉契數列

1 2 4.古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後3 每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?4 兔子的規律為數列1,1,2,3,5,8,13,21.5 6 a,b 0,1 7 moon int input 請輸入月數 8 moon 5...

斐波拉契數列

斐波拉契數列 1 1 2 3 5 8 13 21 34.其中每乙個數字都是前兩個數字的和。遞迴計算 long fibonacci int n 非遞迴計算 long fibonacci int n return result 這個函式的遞迴實現使用了雙重遞迴 double recursion 函式對本...