Partage de technologie

Algorithme récursif [calcul factoriel]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

algorithme récursifest une technique de programmation largement utilisée en informatique et en mathématiques qui permet aux fonctionsdirectouindirectatterrirs'appeler résoudre le problème.récursifIdée basiqueIl s’agit de la décomposition de problèmes complexes en sous-problèmes plus petits et similaires jusqu’à ce que ces sous-problèmes soient suffisamment simples pour être résolus directement.

Les algorithmes récursifs contiennent généralement deux parties principales :

  • Cas de base : il s'agit de la condition de terminaison pour les appels récursifs, c'est-à-dire l'instance de problème la plus simple à laquelle il est possible de répondre directement sans autres appels récursifs.
  • Cas récursif : il s'agit du processus consistant à diviser un problème en sous-problèmes plus petits et à résoudre ces sous-problèmes via des appels récursifs. Le cas récursif doit garantir que chaque appel progresse vers le cas de base.

Étapes de l'algorithme récursif :

  • Identifiez les cas de base : déterminez quels problèmes peuvent être résolus directement sans autres appels récursifs.
  • Concevoir des situations de récursion : définir comment diviser un gros problème en sous-problèmes plus petits et comment combiner les solutions aux sous-problèmes pour obtenir une solution au problème d'origine.
  • Garantir la convergence récursive : garantissez que les appels récursifs finiront par atteindre le cas de base et éviteront une récursion infinie.

Avantages et inconvénients des algorithmes récursifs :

avantage: Le code est concis, la logique est claire et il est facile à comprendre et à écrire.
défaut : Peut être moins efficace que la solution itérative car elle implique plus de surcharge d’appel de fonction. De plus, une récursivité trop profonde peut provoquer des erreurs de débordement de pile.

La récursivité a des applications dans de nombreux algorithmes, tels queparcours d'arbreRecherche graphiqueProgrammation dynamique, etc. . Une utilisation appropriée de la récursivité peut simplifier la résolution de problèmes complexes.

Exemple : Calculer une factorielle

def factorial(n):#自定义求n的阶乘函数
        if n==1:#判断n=1
                return 1#返回1结束
        else:#递归条件 即n!=1
                return n*factorial(n-1)#递归求阶乘

number = int(input("请输入一个正整数:"))#输入n的值
result = factorial(number)#调用阶乘函数
print("%d 的阶乘是 %d" %(number,result))#输出结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Insérer la description de l'image ici

Explication du code

factorial La fonction reçoit un paramètre n , représente le nombre pour lequel la factorielle doit être calculée.La factorielle s’exprime sous la formen!, défini comme tout inférieur ou égal à n Le produit d’entiers positifs. Par exemple,5! = 5 × 4 × 3 × 2 × 1 = 120

À l'intérieur de la fonction :

  • Cas de base : si n Si égal à 1, la fonction renvoie directement 1. C'est la condition de fin de la récursion car la factorielle de 1 est définie comme 1.
  • Cas récursif : si n n'est pas égal à 1, la fonction seran etfactorial(n-1) Les résultats sont multipliés.factorial(n-1) est vraifactorial fonctionL'appel lui-même , mais le paramètre est réduit de 1.Cet appel se poursuivra jusqu'àn atteint 1.

La clé de la récursivité est que chaque appel récursif se rapproche du cas de base, atteignant finalement le cas de base et commençant à renvoyer des valeurs. Dans cet exemple, chaque appel récursif diminue n de 1 jusqu'à ce que n devienne 1.

Avis:

La récursivité peut rencontrer des problèmes de performances ou des erreurs de débordement de pile lors de la gestion de valeurs volumineuses, car chaque appel de fonction occupe une partie de l'espace de la pile. Pour les opérations mathématiques simples comme les factorielles, il existe souvent des méthodes itératives plus efficaces et plus respectueuses de la mémoire. Cependant, la récursivité offre un moyen élégant et facile à comprendre de résoudre certains problèmes.