Fonctions récursives, partie 2
Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 58 sur 78.
Chaque fonction récursive comporte les deux mêmes parties :
- Le cas de base indique quand s’arrêter.
- L’étape récursive appelle la fonction avec une entrée plus petite.
La factorielle de n est n * (n - 1) * ... * 1, donc la factorielle de n est égale à n fois la factorielle de n - 1 :
func factorial(n: int) -> int:
if n == 1: # cas de base
return 1
return n * factorial(n - 1) # étape récursivefactorial(5) appelle factorial(4), qui appelle factorial(3), jusqu’à factorial(1), qui renvoie 1. En remontant, chaque appel effectue une multiplication : le résultat est 120.
Une entrée plus petite ne signifie pas nécessairement un nombre plus petit. Une chaîne plus courte fonctionne aussi. Cette fonction inverse une chaîne :
func reverse_text(text: String) -> String:
if text.length() <= 1: # cas de base
return text
return reverse_text(text.substr(1)) + text[0]text.substr(1) est la chaîne sans son premier caractère. La fonction inverse cette chaîne plus courte et ajoute le premier caractère à la fin. Une chaîne de zéro ou un caractère est déjà inversée : c’est le cas de base.
print(reverse_text("hello"))ollehDéfi
FacileÉcris une fonction récursive nommée fibonacci qui prend un nombre entier positif n et renvoie le nᵉ nombre de Fibonacci :
fibonacci(1)vaut0fibonacci(2)vaut1- pour
n > 2,fibonacci(n)vautfibonacci(n - 1) + fibonacci(n - 2)
Par exemple, fibonacci(6) renvoie 5 (la suite commence par 0, 1, 1, 2, 3, 5).
Les tests appellent eux-mêmes fibonacci(). Ne l’appelle pas et n’affiche rien.
Essayez vous-même
func fibonacci(n: int):
# Écrivez le code ici
pass
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes de caractères en profondeur
Méthodes des chaînesRechercher dans les chaînesRemplacer et supprimer les espacesDécouper et joindreRécapitulatif - Vérifier un nom d’utilisateur4Dictionnaires, partie 2
Dictionnaires imbriquésTableaux de dictionnairesFusionner des dictionnairesCopier des dictionnairesRécapitulatif - Compteur de fréquence7Énumérations
Qu’est-ce qu’une énumération ?Définir une énumérationValeurs d’une énumérationÉnumérations avec matchRécapitulatif - Feu de circulation10Fonctions avancées
Renvoyer plusieurs valeursFonctions lambda, partie 1Fonctions lambda, partie 2Récapitulatif - Tri avec lambdaFonctions récursives, partie 1Fonctions récursives, partie 2Récapitulatif - Somme d’un tableau imbriqué13Système de gestion des stocks
Présentation du projetAjouter un article2Prise de décision avancée
Correspondance avec des variablesGardes de correspondanceMotifs de tableauMotifs de dictionnaireVérifications d’appartenanceRécapitulatif – Analyseur de commandes5Application de carnet d’adresses
Afficher le menuAjouter un contact8Gestionnaire des dossiers étudiants
Aperçu du projetAjouter un étudiant3Tableaux multidimensionnels
Bases des tableaux 2DAccéder aux éléments d’un tableau 2DBoucles imbriquées avec des tableaux 2DRécapitulatif - Tableaux 2DTableaux irréguliersMotifs courants des tableaux 2DRécapitulatif - Plateau de jeu6Les ensembles avec les dictionnaires
Qu’est-ce qu’un ensemble ?Un dictionnaire comme ensembleAjouter et supprimerUnion et intersectionDifférence d’ensemblesRécapitulatif – Supprimer les doublons9Agrégation avancée de données
Additionner des valeursTrouver le minimum et le maximumTri personnaliséRécapitulatif - Trieur de dictionnairesEntraînez-vous par vous-même : Compilateur GDScript en ligne