版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzx479/article/details/80964429
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