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 simple fonction de compte à rebours. Cet exercice t'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écursion permet cela : 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.

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

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

Lorsque tu appelles 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écursivité en comptant à rebours à partir d’un nombre donné et en affichant des messages personnalisés à chaque étape.

  1. Lisez une entrée de type chaîne représentant le nombre de départ du compte à rebours
  2. Lisez une entrée de type chaîne représentant le préfixe du message personnalisé (par exemple, "Launch in", "Timer" ou "Countdown")
  3. Convertissez la première entrée en entier à l’aide de 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 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 retournez
    • Étape récursive : Affichez le préfixe du message suivi du nombre actuel, puis appelez la fonction 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 dans le format exact présenté 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’à atteindre le cas de base. La fonction doit afficher le message personnalisé avec le nombre actuel à chaque appel récursif, démontrant comment la récursivité décompose le problème en sous-problèmes plus petits et identiques. Utilisez l’interpolation de chaînes pour formater les messages du compte à rebours comme "$messagePrefix $number".

Essayez vous-même

import 'dart:io';

// TODO: Créez votre fonction customCountdown ici
// N'oubliez pas de gérer le cas de base (number <= 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
  // Remember to handle null safety for 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

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