演算法之遞迴
阿新 • • 發佈:2018-12-20
何時用遞迴
需滿足三個條件:
- 一個問題的解可以分解為幾個子問題的解
- 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣
- 存在遞迴終止條件
使用遞迴時注意要點
- 要注意避免堆疊溢位
- 要注意不要過量的重複性計算(可以利用map儲存計算值)
遞迴與迭代的區別
- 遞迴是函式呼叫函式自身
- 迭代是變數自身的數值變化
簡單例子
問題:假如現在有 n 個臺階,每次你可以跨 1 個臺階或者 2 個臺階,請問走這n個臺階有多少種走法?
解答:這個問題可以分解為,n個臺階的走法等於跨了一個臺階之後的臺階的走法加上跨了兩個臺階之後的走法。用函式表示的話,就是。那麼,終止條件是什麼呢?
有兩個,當n為1時,,當n為2時,。
滿足上面所述的使用遞迴所要具備的三個條件,接下來就轉換為程式碼就行了。
def main():
n = input()
print(f(n))
def f(n):
s = {}
if n == 1:
return 1
if n == 2:
return 2
if n in s.keys():
print(n)
return s[n]
ret = (f(n-1) + f(n-2))
if n not in s.keys():
s[n] = ret
return ret
main()