python學習——用lambda實現斐波那契函式
阿新 • • 發佈:2019-02-19
問題:一個人一次只能上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]