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

2021-08-09 10:42:53 字數 1074 閱讀 5945

問題:乙個人一次只能上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]

Python學習 用python來買彩票

常見的彩票有雙色球和大樂透,我們以這兩種為例,用python實現隨機選號功能。雙色球 雙色球 每注投注號碼由6個紅色球號碼和1個藍色球號碼組成。紅色球號碼從1 33中選擇 藍色球號碼從1 16中選擇。import random list red x for x in range 1,34 1 33紅...

python學習筆記 lambda

之前用過lambda,但是雖然用過卻並沒有仔細的想過lambda,今天就簡單的說說lambda。還是遵循我固有的三板斧 what,how,why。1 lambda是什麼,以及怎麼用 lambda是乙個匿名函式,用法如下。a lambda x x 1上式等價與 def a x reurn x 1下面的...

Python入門學習 使用者互動程式

author winnie hu username input username password input password print username,password raw input 2.x input 3.x 字串拼接法 name input name age input age j...