本文主要為大家詳細介紹了python利用高階函數實現剪枝函數的相關資料,具有一定的參考價值,有興趣的小夥伴們可以參考一下,希望能幫助到大家。
案例:
某些時候,我們想要為多個函數,增加某種功能,例如計時統計,記錄日誌,快取運算結果等等
需求:
在每個函數中不需要加上完全相同的程式碼
如何解決?
將相同的程式碼抽調出來,定義成裝飾器 等於前兩項之和求一個共有10個台階的樓梯,從下走到上面,一次只能邁出1~3個台階,並且不能後退,有多少中方法?
上階梯問題邏輯整理:
每次踏出都是1~3 個階梯,剩下是7~#9 個台階##若跨出1個台階,需要求出後面9個台階的走法
若踏出3個台階,需要求出後面7個台階的走法
此3種方式走法,以遞歸方式實現,以遞歸像樹,每次遞歸都產生子節點
以上函數
#!/usr/bin/python3 def jian_zhi(func): # 中间字典,判断已经是否求解过 median = {} def wrap(*args): # 假如不在中间字典中,说明没有求解过,添加到字典中去,在的话,直接返回 if args not in median: median[args] = func(*args) return median[args] return wrap @jian_zhi def fibonacci(n): if n <= 1: return 1 return fibonacci(n-1) + fibonacci(n-2) @jian_zhi def climb(n, steps): count = 0 # 当最后台阶为0的时候,说明最后只是走了一次 if n == 0: count = 1 # 当最后台阶不为0的时候,说明还需要走至少一次 elif n > 0: # 对三种情况进行分别处理momo for step in steps: count += climb(n-step, steps) # 返回每次递归的计数 return count if __name__ == '__main__': print(climb(10, (1, 2, 3))) print(fibonacci(20))
所謂的剪枝函數不過是保證每次遞歸的函數唯一性,利用中間字典保存已經執行過得函數和參數,透過判斷參數,剔除重複的函數呼叫。
#######以上是python中高階函數實作剪枝函數的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!