Menu
Coddy logo textTech

Función recursiva: Cuenta regresiva

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy. Lección 48 de 65.

Ahora es el momento de poner en práctica la recursividad con una función simple de cuenta regresiva. Este ejercicio te ayudará a comprender cómo funcionan juntos el caso base y el paso recursivo en código real.

Una función de cuenta regresiva comienza con un número e imprime cada número hasta llegar a cero. Así es como la recursión hace que esto funcione: si el número es mayor que cero, imprímelo y después llama a la misma función con un número menor. Cuando el número llega a cero, detente.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Caso base - detenerse aquí
  }
  
  print(number);
  countdown(number - 1); // Paso recursivo
}

El caso base comprueba si number <= 0: este es el momento en que dejamos de llamar a la función. El paso recursivo llama a countdown(number - 1), que es el mismo problema, pero con una entrada más pequeña, lo que nos acerca gradualmente al caso base.

Cuando llamas a countdown(3), imprime 3, después llama a countdown(2), que imprime 2, después llama a countdown(1), que imprime 1, después llama a countdown(0), que imprime "Done!" y se detiene.

challenge icon

Desafío

Fácil

Crea un programa que implemente un temporizador de cuenta regresiva recursivo con mensajes personalizados. Tu programa demostrará la recursión contando hacia atrás desde un número dado y mostrando mensajes personalizados en cada paso.

  1. Lee una entrada de tipo cadena que represente el número inicial de la cuenta regresiva
  2. Lee una entrada de tipo cadena que represente un prefijo de mensaje personalizado (por ejemplo, "Launch in", "Timer" o "Countdown")
  3. Convierte la primera entrada en un entero usando int.parse()
  4. Crea una función recursiva llamada customCountdown que reciba dos parámetros:
    • Un entero number que represente el valor actual de la cuenta regresiva
    • Una cadena messagePrefix para el mensaje personalizado
  5. La función debe implementar la siguiente lógica:
    • Caso base: Si el número es menor o igual que 0, imprime "Countdown complete!" y retorna
    • Paso recursivo: Imprime el prefijo del mensaje seguido del número actual; después, se llama a sí misma con number - 1
  6. Llama a la función customCountdown con el número convertido y el prefijo del mensaje
  7. Muestra los resultados exactamente en el formato que aparece a continuación

Por ejemplo, si las entradas son "5" y "Launch in", tu programa debería mostrar:

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 las entradas son "3" y "Timer", tu programa debería mostrar:

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

Si las entradas son "0" y "Ready", tu programa debería mostrar:

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

Tu programa debe implementar la función recursiva customCountdown, que se llama a sí misma con un número decrementado hasta alcanzar el caso base. La función debe imprimir el mensaje personalizado con el número actual en cada llamada recursiva, demostrando cómo la recursión descompone el problema en subproblemas más pequeños e idénticos. Usa la interpolación de cadenas para dar formato a los mensajes de la cuenta regresiva como "$messagePrefix $number".

Pruébalo tú mismo

import 'dart:io';

// TODO: Crea tu función customCountdown aquí
// Recuerda manejar el caso base (number <= 0) y el paso recursivo

void main() {
  // Leer la entrada
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Convertir string a entero
  int number = int.parse(startingNumber!);
  
  // Mostrar la información inicial
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Llama a tu función customCountdown aquí
  // Remember to handle null safety for messagePrefix
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Dart online