Comment implémenter des fonctions d'élagage à l'aide de fonctions d'ordre élevé en python

小云云
Libérer: 2018-03-29 14:30:27
original
2088 Les gens l'ont consulté

Cet article présente principalement en détail les informations pertinentes sur l'utilisation par Python de fonctions d'ordre supérieur pour implémenter des fonctions d'élagage. Il a une certaine valeur de référence. J'espère qu'il pourra aider tout le monde.

Cas :

Parfois, nous souhaitons ajouter certaines fonctions à plusieurs fonctions, telles que les statistiques de synchronisation, la journalisation, la mise en cache des résultats des opérations, etc.

Exigences :

Pas besoin d'ajouter exactement le même code dans chaque fonction

Comment le résoudre ?

Extraire le même code et le définir comme décorateur

Trouver la séquence de Fibonacci (séquence du nombre d'or), à partir du 3ème élément de la séquence, chaque élément est Est égal à la somme des deux premiers termes

Trouvez un escalier avec un total de 10 marches Du bas vers le haut, vous ne pouvez faire que 1 à 3 marches à la fois, et vous ne pouvez pas revenir en arrière. existe-t-il des méthodes correctes ?

Disposition logique du problème des étapes :

Chaque étape est de 1 à 3 étapes, et les étapes restantes sont de 7 à 9 étapes

Si vous fais 1 pas, tu dois trouver les étapes pour les 9 prochaines étapes

Si tu fais 2 pas, tu dois trouver les étapes pour les 8 prochaines étapes

Si tu fais 3 pas étapes , vous devez trouver les étapes pour les 7 étapes suivantes

Ces 3 façons de marcher sont réalisées par récursivité. La récursion est comme un arbre Chaque récursion génère des fonctions de nœuds enfants

ou supérieures. Lorsque les deux problèmes sont résolus par récursion, un problème surviendra, un problème de solution répétée, et le processus de solution répétée sera éliminé. Dans le langage C++, cela s'appelle la fonction d'élagage


#!/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))
Copier après la connexion
La fonction dite d'élagage vise simplement à garantir le caractère unique de chaque fonction de récursion. Elle utilise un dictionnaire intermédiaire pour enregistrer les fonctions et les paramètres exécutés, et élimine les appels de fonction répétés en jugeant les paramètres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal