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