1. 程式人生 > >python基礎 -- Fibonacci數列的n種方法

python基礎 -- Fibonacci數列的n種方法

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