Menu
Coddy logo textTech

Rekursive Funktion: Countdown

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 48 von 65.

Jetzt ist es an der Zeit, Rekursion mit einer einfachen Countdown-Funktion in die Praxis umzusetzen. Diese Übung wird Ihnen helfen zu verstehen, wie der Basisfall und der rekursive Schritt in echtem Code zusammenarbeiten.

Eine Countdown-Funktion beginnt mit einer Zahl und gibt jede Zahl bis Null aus. So lässt sich dies mit Rekursion umsetzen: Wenn die Zahl größer als Null ist, gib sie aus und rufe dann dieselbe Funktion mit einer kleineren Zahl auf. Wenn die Zahl Null erreicht, stoppe.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Basisfall - hier anhalten
  }
  
  print(number);
  countdown(number - 1); // Rekursiver Schritt
}

Der Basisfall prüft, ob number <= 0 – dies ist der Zeitpunkt, an dem wir aufhören, die Funktion aufzurufen. Der rekursive Schritt ruft countdown(number - 1) auf, was dasselbe Problem ist, aber mit einer kleineren Eingabe, was uns schrittweise dem Basisfall näher bringt.

Wenn du countdown(3) aufrufst, gibt es 3 aus, ruft dann countdown(2) auf, was 2 ausgibt, ruft dann countdown(1) auf, was 1 ausgibt, und ruft dann countdown(0) auf, was "Done!" ausgibt und stoppt.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das einen rekursiven Countdown-Timer mit benutzerdefinierten Nachrichten implementiert. Ihr Programm wird Rekursion demonstrieren, indem es von einer gegebenen Zahl herunterzählt und bei jedem Schritt personalisierte Nachrichten anzeigt.

  1. Lesen Sie eine String-Eingabe ein, die die Startnummer für den Countdown darstellt
  2. Lesen Sie eine String-Eingabe ein, die ein benutzerdefiniertes Nachrichten-Präfix darstellt (z. B. "Launch in", "Timer" oder "Countdown")
  3. Konvertieren Sie die erste Eingabe mit int.parse() in eine Ganzzahl
  4. Erstellen Sie eine rekursive Funktion namens customCountdown, die zwei Parameter entgegennimmt:
    • Eine Ganzzahl number, die den aktuellen Countdown-Wert darstellt
    • Einen String messagePrefix für die benutzerdefinierte Nachricht
  5. Die Funktion sollte die folgende Logik implementieren:
    • Basisfall: Wenn die Zahl kleiner oder gleich 0 ist, geben Sie "Countdown complete!" aus und beenden Sie die Funktion
    • Rekursiver Schritt: Geben Sie das Nachrichten-Präfix gefolgt von der aktuellen Zahl aus und rufen Sie sich dann selbst mit number - 1 auf
  6. Rufen Sie die Funktion customCountdown mit der konvertierten Zahl und dem Nachrichten-Präfix auf
  7. Zeigen Sie die Ergebnisse in dem unten gezeigten exakten Format an

Wenn die Eingaben beispielsweise "5" und "Launch in" sind, sollte Ihr Programm Folgendes ausgeben:

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!

Wenn die Eingaben "3" und "Timer" sind, sollte Ihr Programm Folgendes ausgeben:

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

Wenn die Eingaben "0" und "Ready" sind, sollte Ihr Programm Folgendes ausgeben:

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

Ihr Programm muss die rekursive Funktion customCountdown implementieren, die sich selbst mit einer dekrementierten Zahl aufruft, bis sie den Basisfall erreicht. Die Funktion sollte bei jedem rekursiven Aufruf die benutzerdefinierte Nachricht mit der aktuellen Zahl ausgeben und so demonstrieren, wie Rekursion das Problem in kleinere, identische Teilprobleme zerlegt. Verwenden Sie String-Interpolation, um die Countdown-Nachrichten als "$messagePrefix $number" zu formatieren.

Spickzettel

Eine rekursive Countdown-Funktion zeigt, wie Rekursion funktioniert, indem sie von einer Zahl bis auf Null herunterzählt:

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Base case - stop here
  }
  
  print(number);
  countdown(number - 1); // Recursive step
}

Der Basisfall prüft, ob number <= 0 ist, um die Rekursion zu stoppen. Der rekursive Schritt ruft dieselbe Funktion mit number - 1 auf und bewegt sich so auf den Basisfall zu.

Beim Aufruf von countdown(3) wird 3 → 2 → 1 → "Done!" ausgegeben, indem aufeinanderfolgende rekursive Aufrufe mit dekrementierten Werten durchgeführt werden.

Probier es selbst

import 'dart:io';

// TODO: Erstellen Sie hier Ihre customCountdown-Funktion
// Denken Sie daran, den Basisfall (number <= 0) und den rekursiven Schritt zu behandeln

void main() {
  // Eingabe lesen
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // String in Ganzzahl umwandeln
  int number = int.parse(startingNumber!);
  
  // Anfangsinformationen anzeigen
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Rufen Sie hier Ihre customCountdown-Funktion auf
  // Denken Sie daran, die Null-Sicherheit für messagePrefix zu behandeln
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf