Python で高階関数を使用して枝刈り関数を実装する方法

小云云
リリース: 2018-03-29 14:30:27
オリジナル
2070 人が閲覧しました

この記事は、主に Python の高階関数を使用した枝刈り関数に関する関連情報を詳しく紹介しています。興味のある方は参考にしていただければ幸いです。

ケース:

場合によっては、タイミング統計、ロギング、操作結果のキャッシュなど、特定の関数を複数の関数に追加する必要があります。

要件:

各関数で必要ありません まったく同じコードの追加

どうやって解決しますか?同じコードを探索し、それをデコレータとして定義します。下から上まで合計 10 の階段があり、一度に 1 ~ 3 ステップしか進むことができず、戻ることはできません。问题 问题

:

1〜3歩かかるたびに、2歩進むと、残りは7〜9歩かかります。 3 つのステップを実行したら、次の 7 つのステップで 3 つの方法を見つける必要があります。実装方法は、再帰がツリーのようなもので、各再帰が子ノード関数を生成します

上記の 2 つの問題がある場合、再帰によって解決され、問題が発生し、反復解決問題が発生し、反復解決プロセスが削除されます。これは 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_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__ == &#39;__main__&#39;:
  print(climb(10, (1, 2, 3)))
  print(fibonacci(20))
ログイン後にコピー

については、いわゆる枝刈り関数だけです再帰ごとに関数の一意性を保証し、中間辞書を使用して実行された関数とパラメータを保存し、パラメータを判断することで繰り返しの関数呼び出しを排除します。


以上がPython で高階関数を使用して枝刈り関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!