去的過程叫遞
, 回的過程叫歸
, 解決遞歸問題最重要的兩步是python
遞歸須要知足如下3個條件算法
子問題(數據規模更小的問題)
def add(nums): if len(nums) == 1: # 終止條件 return nums[0] return nums[0] + add(nums[1:]) # 遞推公式 res = add(range(4)) print(res)
遞推公式
f(n) = f(n-1) + f(n-2)
緩存
# coding:utf-8 """ 臺階問題 一共有7個臺階, 每一次只能走1個或2個, 有幾種走法 能夠分爲2類, 第一次走1個和第一次走2個 f(n) = f(n-1) + f(n-2) 終止條件是 f(1) = 1, f(2) = 2 """ cache = {} # 加上運算值的緩存, 避免出現重複計算 def f_0(n): if n == 1: return 1 if n == 2: return 2 if n in cache: return cache[n] else: cache[n] = f_0(n - 1) + f_0(n - 2) return cache[n]
改成非遞歸方式數據結構
def f_1(n): """改成非遞歸形式""" if n == 1: return 1 if n == 2: return 2 x, y = 1, 2 for _ in range(3, n + 1): x, y = y, x + y return y