python基礎 -- Fibonacci數列的n種方法
阿新 • • 發佈:2018-12-07
1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)
生成共n項的 Fibonacci數列:
def Generate(i, n, arr):
arr.append(arr[i-1]+ arr[i-2])
if(i == n ):
return(arr)
Generate( i+1 , n , arr)
return (arr)
def Fibonacci1(n):
if n == 0:
arr = [1 ]
return arr[0]
elif n == 1:
arr = [1,1]
return arr[1]
else:
arr = [1,1]
return Generate(2, n , arr)
if __name__ =='__main__':
arr = Fibonacci1(10)
print(arr)
output:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
求出第n項的n項的 Fibonacci數列值:
a. 一般遞迴
def Fibonacci(n):
if n <=1:
return 1
else :
return Fibonacci1(n-1)+ Fibonacci1(n -2)
可以簡化為:
def Fibonacci(n):
fib = lambda n:1 if n<=1 else fib(n-1)+fib(n-2)
return fib(n)
b. 尾遞迴
def Fibonacci(n):
def fib_iterator(n,x,y):
if n == 0:
return x
else:
return fib_iterator(n-1, y, x+y)
return fib_iterator(n, 0 ,1)
尾遞迴可以簡化為:
def Fibonacci(n):
fib = lambda n, x=0, y=1: x if not n else fib(n - 1, y, x + y)
return fib(n)
c. 迭代
def Fibonacci(n):
x,y = 0, 1
while(n):
x,y,n = y ,x+y , n-1
return x
d. 迭代器(yield)
def fib_yield():
a , b = 0 ,1
while True:
yield b
a , b = b, a+b
g = fib_yield()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
output:
1 1 2 3
不得不說,下面這篇博文也很有意思,可以參考
https://blog.csdn.net/ncafei/article/details/54176276