Menu
Coddy logo textTech

Fonction récursive : Compte à rebours

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 48 sur 65.

Il est maintenant temps de mettre la récursion en pratique avec une fonction de compte à rebours simple. Cet exercice vous aidera à comprendre comment le cas de base et l'étape récursive fonctionnent ensemble dans du code réel.

Une fonction de compte à rebours commence par un nombre et affiche chaque nombre jusqu'à zéro. Voici comment la récursivité permet d'y parvenir : si le nombre est supérieur à zéro, affichez-le, puis appelez la même fonction avec un nombre plus petit. Lorsque le nombre atteint zéro, arrêtez-vous.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Cas de base - s'arrêter ici
  }
  
  print(number);
  countdown(number - 1); // Étape récursive
}

Le cas de base vérifie si number <= 0 - c'est à ce moment que nous arrêtons d'appeler la fonction. L'étape récursive appelle countdown(number - 1), ce qui est le même problème mais avec une entrée plus petite, nous rapprochant progressivement du cas de base.

Lorsque vous appelez countdown(3), il affiche 3, puis appelle countdown(2), qui affiche 2, puis appelle countdown(1), qui affiche 1, puis appelle countdown(0), qui affiche "Done!" et s'arrête.

challenge icon

Défi

Facile

Créez un programme qui implémente un compte à rebours récursif avec des messages personnalisés. Votre programme démontrera la récursion en décomptant à partir d'un nombre donné et en affichant des messages personnalisés à chaque étape.

  1. Lisez une entrée de type chaîne de caractères représentant le nombre de départ pour le compte à rebours
  2. Lisez une entrée de type chaîne de caractères représentant un préfixe de message personnalisé (par exemple, "Launch in", "Timer", ou "Countdown")
  3. Convertissez la première entrée en un entier en utilisant int.parse()
  4. Créez une fonction récursive appelée customCountdown qui prend deux paramètres :
    • Un entier number représentant la valeur actuelle du compte à rebours
    • Une chaîne de caractères messagePrefix pour le message personnalisé
  5. La fonction doit implémenter la logique suivante :
    • Cas de base : Si le nombre est inférieur ou égal à 0, affichez "Countdown complete!" et quittez la fonction
    • Étape récursive : Affichez le préfixe du message suivi du nombre actuel, puis appelez-vous elle-même avec number - 1
  6. Appelez la fonction customCountdown avec le nombre converti et le préfixe du message
  7. Affichez les résultats exactement selon le format illustré ci-dessous

Par exemple, si les entrées sont "5" et "Launch in", votre programme doit afficher :

Starting countdown from: 5
Message prefix: Launch in
========================
Launch in 5
Launch in 4
Launch in 3
Launch in 2
Launch in 1
Countdown complete!

Si les entrées sont "3" et "Timer", votre programme doit afficher :

Starting countdown from: 3
Message prefix: Timer
========================
Timer 3
Timer 2
Timer 1
Countdown complete!

Si les entrées sont "0" et "Ready", votre programme doit afficher :

Starting countdown from: 0
Message prefix: Ready
========================
Countdown complete!

Votre programme doit implémenter la fonction récursive customCountdown qui s'appelle elle-même avec un nombre décrémenté jusqu'à ce qu'elle atteigne le cas de base. La fonction doit afficher le message personnalisé avec le nombre actuel à chaque appel récursif, démontrant ainsi comment la récursion décompose le problème en sous-problèmes identiques plus petits. Utilisez l'interpolation de chaîne pour formater les messages du compte à rebours comme "$messagePrefix $number".

Aide-mémoire

Une fonction de compte à rebours récursive démontre le fonctionnement de la récursion en comptant à rebours d'un nombre jusqu'à zéro :

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Cas de base - s'arrêter ici
  }
  
  print(number);
  countdown(number - 1); // Étape récursive
}

Le cas de base vérifie si number <= 0 pour arrêter la récursion. L'étape récursive appelle la même fonction avec number - 1, se rapprochant ainsi du cas de base.

Lors de l'appel de countdown(3), il affiche 3 → 2 → 1 → "Done!" en effectuant des appels récursifs successifs avec des valeurs décrémentées.

Essayez vous-même

import 'dart:io';

// TODO: Créez votre fonction customCountdown ici
// N'oubliez pas de gérer le cas de base (nombre <= 0) et l'étape récursive

void main() {
  // Lire l'entrée
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Convertir la chaîne en entier
  int number = int.parse(startingNumber!);
  
  // Afficher les informations initiales
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Appelez votre fonction customCountdown ici
  // N'oubliez pas de gérer la sécurité null pour messagePrefix
}
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 & Flux