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 de cuenta regresiva sencilla. Este ejercicio te ayudará a entender cómo el caso base y el paso recursivo funcionan juntos 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 recursividad hace que esto funcione: si el número es mayor que cero, imprímelo y luego llama a la misma función con un número menor. Cuando el número llegue 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 - aquí es cuando 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, moviéndonos gradualmente hacia el caso base.

Cuando llamas a countdown(3), imprime 3, luego llama a countdown(2), que imprime 2, luego llama a countdown(1), que imprime 1, luego 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 recursividad contando hacia atrás desde un número dado y mostrando mensajes personalizados en cada paso.

  1. Lee una entrada de cadena que represente el número inicial para la cuenta regresiva
  2. Lee una entrada de cadena que represente un prefijo de mensaje personalizado (por ejemplo, "Launch in", "Timer" o "Countdown")
  3. Convierte la primera entrada a un entero usando int.parse()
  4. Crea una función recursiva llamada customCountdown que tome dos parámetros:
    • Un entero number que representa 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 a 0, imprime "Countdown complete!" y retorna
    • Paso recursivo: Imprime el prefijo del mensaje seguido del número actual, luego llámate a ti mismo con number - 1
  6. Llama a la función customCountdown con el número convertido y el prefijo del mensaje
  7. Muestra los resultados en el formato exacto que se muestra 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 que alcanza el caso base. La función debe imprimir el mensaje personalizado con el número actual en cada llamada recursiva, demostrando cómo la recursividad divide el problema en subproblemas más pequeños e idénticos. Usa la interpolación de cadenas para formatear los mensajes de cuenta regresiva como "$messagePrefix $number".

Hoja de referencia

Una función de cuenta regresiva recursiva demuestra cómo funciona la recursividad contando hacia atrás desde un número hasta cero:

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

El caso base verifica si number <= 0 para detener la recursividad. El paso recursivo llama a la misma función con number - 1, avanzando hacia el caso base.

Al llamar a countdown(3), imprime 3 → 2 → 1 → "Done!" realizando llamadas recursivas sucesivas con valores decrementados.

Pruébalo tú mismo

import 'dart:io';

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

void main() {
  // Leer entrada
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Convertir cadena a entero
  int number = int.parse(startingNumber!);
  
  // Mostrar información inicial
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Llama a tu función customCountdown aquí
  // Recuerda manejar la seguridad de nulos para 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