Menu
Coddy logo textTech

Função Recursiva: Contagem Regressiva

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 48 de 65.

Agora é hora de colocar a recursão em prática com uma função simples de contagem regressiva. Este exercício ajudará você a entender como o caso base e a etapa recursiva trabalham juntos em um código real.

Uma função de contagem regressiva começa com um número e imprime cada número até chegar a zero. Veja como a recursão faz isso funcionar: se o número for maior que zero, imprima-o e depois chame a mesma função com um número menor. Quando o número chegar a zero, pare.

void countdown(int number) {
  if (number <= 0) {
    print("Done!");
    return; // Caso base - pare aqui
  }
  
  print(number);
  countdown(number - 1); // Passo recursivo
}

O caso base verifica se number <= 0 — é quando paramos de chamar a função. A etapa recursiva chama countdown(number - 1), que é o mesmo problema, mas com uma entrada menor, levando-nos gradualmente em direção ao caso base.

Quando você chama countdown(3), ele imprime 3, depois chama countdown(2), que imprime 2, depois chama countdown(1), que imprime 1, depois chama countdown(0), que imprime "Done!" e para.

challenge icon

Desafio

Fácil

Crie um programa que implemente um temporizador de contagem regressiva recursivo com mensagens personalizadas. Seu programa demonstrará a recursão fazendo uma contagem regressiva a partir de um número fornecido e exibindo mensagens personalizadas a cada etapa.

  1. Leia uma entrada de string que represente o número inicial da contagem regressiva
  2. Leia uma entrada de string que represente um prefixo de mensagem personalizado (por exemplo, "Launch in", "Timer" ou "Countdown")
  3. Converta a primeira entrada em um inteiro usando int.parse()
  4. Crie uma função recursiva chamada customCountdown que aceite dois parâmetros:
    • Um inteiro number que represente o valor atual da contagem regressiva
    • Uma string messagePrefix para a mensagem personalizada
  5. A função deve implementar a seguinte lógica:
    • Caso-base: se o número for menor ou igual a 0, imprima "Countdown complete!" e retorne
    • Etapa recursiva: imprima o prefixo da mensagem seguido pelo número atual e, em seguida, chame a si mesma com number - 1
  6. Chame a função customCountdown com o número convertido e o prefixo da mensagem
  7. Exiba os resultados exatamente no formato mostrado abaixo

Por exemplo, se as entradas forem "5" e "Launch in", seu programa deverá produzir:

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!

Se as entradas forem "3" e "Timer", seu programa deverá produzir:

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

Se as entradas forem "0" e "Ready", seu programa deverá produzir:

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

Seu programa deve implementar a função recursiva customCountdown, que chama a si mesma com um número decrementado até alcançar o caso-base. A função deve imprimir a mensagem personalizada com o número atual a cada chamada recursiva, demonstrando como a recursão divide o problema em subproblemas menores e idênticos. Use interpolação de strings para formatar as mensagens da contagem regressiva como "$messagePrefix $number".

Experimente você mesmo

import 'dart:io';

// TODO: Crie sua função customCountdown aqui
// Lembre-se de tratar o caso base (number <= 0) e o passo recursivo

void main() {
  // Ler a entrada
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Converter string para inteiro
  int number = int.parse(startingNumber!);
  
  // Exibir informações iniciais
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Chame sua função customCountdown aqui
  // Remember to handle null safety for messagePrefix
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Dart online