python基础 -- Fibonacci数列的n种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/wzx479/article/details/80964429