1. 程式人生 > >python學習——用lambda實現斐波那契函式

python學習——用lambda實現斐波那契函式

問題:一個人一次只能上1個臺階或2個臺階,問登上n個臺階共有多少種方法?

首先用數學的結題思路進行分析,得到答案,f(n)=f(n-1)+f(n-2),正好是斐波那契數列。
在pytho中實現的話,用lambda一行即可實現:

fib = lambda n : n if n <= 2 else fib(n-1)+fib(n-2)

轉化成常見的函式形式為:

def fib(n):
    if n <= 2:
        return n
    else:
        return fib(n-1)+fib(n-2)

擴充套件問題:一個人一次只能上1個臺階、2個臺階、3個臺階……n個臺階,問登上n個臺階共有多少種方法?

同樣先用數學方法解決,得到答案為:f(n)=f(n-1)+f(n-2)+……+f(1)+1

用lambda實現:

fib = lambda n : n if n <2 else 2*fib(n-1)

不過在實際中,最好不要使用lambda匿名函式,顯得有點裝逼,還是老老實實用for … in …if …語句比較好。

其實,對於該問題,如果用lambda函式的話,該演算法的複雜度是O(2^n),這是什麼概念呢,如果n=35時,大概需要算5秒,這是什麼概念知道了吧,完全不實用,還是老老實實用迭代最好。遞迴真心是用來裝逼的,怪不得Python內部機制也設計了最多遞迴迴圈1000次了。

如下:

def fib(n):
    a, b = 0, 1
    i = 0
    while i < n:
        a, b = b, a+b
        i += 1 
    return a

得到:

res = fib(20)
print(res)
#6765
[Finished in 0.2s]