Fonctions récursives, partie 1
Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 57 sur 78.
Une fonction récursive est une fonction qui s’appelle elle-même. Chaque appel résout une version plus petite du problème, jusqu’à ce que le problème soit assez simple pour recevoir une réponse directe.
Cette fonction additionne les nombres entiers de 1 à n :
func sum_to_n(n: int) -> int:
if n == 0: # cas de base
return 0
return n + sum_to_n(n - 1) # étape récursiveIl comporte deux parties :
- Le cas de base répond sans rappeler la fonction : la somme jusqu’à
0est0. - L’étape récursive appelle la fonction avec une valeur plus petite,
n - 1, et construit sa réponse à partir du résultat.
sum_to_n(3) vaut 3 + sum_to_n(2), qui vaut 3 + 2 + sum_to_n(1), qui vaut 3 + 2 + 1 + sum_to_n(0). Le cas de base renvoie 0, et les appels en attente se terminent un à un : le résultat est 6.
Chaque étape récursive doit se rapprocher du cas de base. Sans cas de base, ou avec une étape comme n + 1 qui ne l’atteint jamais, la fonction continue de s’appeler elle-même. Godot autorise environ 1 000 appels imbriqués, puis arrête le programme en signalant une erreur.
Défi
FacileLe programme lit un nombre entier n (0 ou plus) et appelle count_down(n).
Sous _ready(), écris la fonction récursive count_down avec un paramètre. Elle affiche chaque nombre de son argument jusqu’à 0, un par ligne. N’utilise aucune boucle : la fonction affiche son nombre et s’appelle elle-même avec le nombre inférieur suivant.
Pour l’entrée 3, la sortie est :
3
2
1
0Essayez vous-même
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# Écrivez ci-dessous la fonction récursive count_down(n)
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