什么是斐波拉那契數(shù)列
斐波拉契數(shù)列(Fibonacci sequence)脯倒,又稱(chēng)黃金分割數(shù)列、因數(shù)學(xué)家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱(chēng)為“兔子數(shù)列”,指的是這樣一個(gè)數(shù)列:1、1癣籽、2、3、5筷狼、8瓶籽、13、21埂材、34塑顺、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:F(0)=1楞遏,F(xiàn)(1)=1, F(n)=F(n-1)+F(n-2)(n>=2茬暇,n∈N*)
也就是說(shuō)斐波那契數(shù)列就是從第三個(gè)數(shù)開(kāi)始(第一、二兩個(gè)數(shù)都是1)寡喝,后面的數(shù)都是前兩個(gè)數(shù)之和糙俗。那么如何用Python來(lái)表示該數(shù)列呢?
算法思路:
- 初始化前兩個(gè)數(shù)a和b為1
- 從第三個(gè)數(shù)開(kāi)始预鬓,大小等于前面兩個(gè)數(shù)之和巧骚,F(xiàn)(3)=F(1)+F(2)
- 用循環(huán)語(yǔ)句打印該數(shù)列
代碼示意:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print b
a, b = b, a+b
n += 1
print 'Done'
fib(6)
運(yùn)行結(jié)果:
計(jì)算過(guò)程:
擴(kuò)展閱讀:
在打印列表的過(guò)程中,很多時(shí)候只用到前幾個(gè)元素格二,后面很多元素根本用不到劈彪,白白占用了存儲(chǔ)空間,特別是列表數(shù)量上百萬(wàn)顶猜、千萬(wàn)沧奴、甚至無(wú)窮大時(shí),那么有沒(méi)有一種辦法可以用幾個(gè)元素就計(jì)算到第幾個(gè)呢长窄?用生成器就可以解決這個(gè)問(wèn)題滔吠。
把前面的函數(shù)print改成yield即可:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a+b
n += 1
print 'Done'
fib(6)