斐波那契數(shù)列大家都很熟悉吧,咱們?cè)诟咧袑W(xué)數(shù)學(xué)的時(shí)候,老師會(huì)講這個(gè)定律以及算法眨层,其實(shí)數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)息息相關(guān),數(shù)學(xué)思維好的往往邏輯思維就比較好上荡,今天小猿圈帶大家學(xué)習(xí)一下python的斐波那契數(shù)列的實(shí)現(xiàn)趴樱。
程序分析:斐波那契數(shù)列(Fibonacci sequence),又稱黃金分割數(shù)列酪捡,指的是這樣一個(gè)數(shù)列:0叁征、1、1逛薇、2捺疼、3、5永罚、8啤呼、13卧秘、21、34官扣、……
在數(shù)學(xué)上翅敌,費(fèi)波那契數(shù)列是以遞歸的方法來(lái)定義:
F0 = 0? ? (n=0)
F1 = 1? ? (n=1)
Fn = F[n-1]+ F[n-2](n=>2)
程序源代碼:
方法一:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 斐波那契數(shù)列
def fib(n):
? ? a, b = 1, 1
? ? for i in range(n-1):
? ? ? ? a, b = b, a+b
? ? return a
# 輸出了第10個(gè)斐波那契數(shù)列
print fib(10)
方法二:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 斐波那契數(shù)列
# 使用遞歸
def fib(n):
? ? if n == 1 or n == 2:
? ? ? ? return 1
? ? return fib(n - 1) + fib(n - 2)
# 輸出了第10個(gè)斐波那契數(shù)列
print fib(10)
以上實(shí)例輸出了第10個(gè)斐波那契數(shù)列,結(jié)果為:
55
方法三:
如果你需要輸出指定個(gè)數(shù)的斐波那契數(shù)列醇锚,可以使用以下代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 斐波那契數(shù)列
def fib(n):
? ? if n == 1:
? ? ? ? return [1]
? ? if n == 2:
? ? ? ? return [1, 1]
? ? fibs = [1, 1]
? ? for i in range(2, n):
? ? ? ? fibs.append(fibs[-1] + fibs[-2])
? ? return fibs
# 輸出前10個(gè)斐波那契數(shù)列
print fib(10)
以上程序運(yùn)行輸出結(jié)果為:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
大家對(duì)斐波那契數(shù)列python的實(shí)現(xiàn)學(xué)會(huì)了吧哼御,也是很簡(jiǎn)單的,代碼也是優(yōu)雅的吧焊唬,斐波那契數(shù)列用到的地方還蠻多的恋昼,大家平時(shí)可以多看一下類似于這種算法的結(jié)構(gòu),讓自己的腦子靈光的轉(zhuǎn)起來(lái)赶促,只要這樣才能有很好的idea液肌,可以去小猿圈了解更多的算法,大家加油鸥滨!