国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python利用高階函數實現剪枝函數

2020-01-04 15:34:38
字體:
來源:轉載
供稿:網友

本文為大家分享了python利用高階函數實現剪枝函數的具體代碼,供大家參考,具體內容如下

案例:

       某些時候,我們想要為多個函數,添加某種功能,比如計時統計,記錄日志,緩存運算結果等等

       需求:

              在每個函數中不需要添加完全相同的代碼

如何解決?

       把相同的代碼抽調出來,定義成裝飾器

              求斐波那契數列(黃金分割數列),從數列的第3項開始,每一項都等于前兩項之和

         求一個共有10個臺階的樓梯,從下走到上面,一次只能邁出1~3個臺階,并且不能后退,有多少中方法?

       上臺階問題邏輯整理:

              每次邁出都是 1~3 個臺階,剩下就是 7~9 個臺階

                     如果邁出1個臺階,需要求出后面9個臺階的走法

                     如果邁出2個臺階,需要求出后面8個臺階的走法

                     如果邁出3個臺階,需要求出后面7個臺階的走法

              此3種方式走法,通過遞歸方式實現,遞歸像樹,每次遞歸都生成子節點函數

以上兩個問題通過遞歸來解決,就會出現一個問題,出現重復求解問題,把重復求解的過程剔除掉,在c++語言中稱為剪枝函數

#!/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_zhidef fibonacci(n):  if n <= 1:    return 1  return fibonacci(n-1) + fibonacci(n-2) @jian_zhidef 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))

  所謂的剪枝函數不過是保證每次遞歸的函數唯一性,利用中間字典保存已經執行過得函數和參數,通過判斷參數,剔除重復的函數調用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古蔺县| 琼海市| 棋牌| 建湖县| 许昌市| 丹棱县| 城口县| 灵武市| 托克托县| 古蔺县| 林口县| 楚雄市| 延庆县| 宁夏| 班戈县| 古丈县| 巴彦淖尔市| 蒲江县| 建湖县| 东兴市| 陈巴尔虎旗| 西平县| 察隅县| 白沙| 龙江县| 清丰县| 北宁市| 防城港市| 天祝| 六盘水市| 子洲县| 金沙县| 长沙市| 安宁市| 高要市| 宁城县| 黎川县| 新密市| 象州县| 高邮市| 岳阳县|