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__ == '__main__': print(climb(10, (1, 2, 3))) print(fibonacci(20))
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!