Menu
CoddyTech

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 :

  1. Le cas de base indique quand s’arrêter.
  2. 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écursive

factorial(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"))
olleh
challenge icon

Dé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) vaut 0
  • fibonacci(2) vaut 1
  • pour n > 2, fibonacci(n) vaut fibonacci(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
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur GDScript en ligne