Menu
Coddy logo textTech

Funzione ricorsiva: conto alla rovescia

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 48 di 65.

Ora è il momento di mettere in pratica la ricorsione con una semplice funzione di conto alla rovescia. Questo esercizio ti aiuterà a capire come il caso base e il passaggio ricorsivo lavorano insieme nel codice reale.

Una funzione di conto alla rovescia parte da un numero e stampa ogni numero fino a zero. Ecco come la ricorsione permette di farlo: se il numero è maggiore di zero, stampalo e poi richiama la stessa funzione con un numero più piccolo. Quando il numero raggiunge zero, fermati.

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

Il caso base verifica se number <= 0 - è in questo momento che smettiamo di chiamare la funzione. Il passaggio ricorsivo chiama countdown(number - 1), che è lo stesso problema ma con un input più piccolo, avvicinandoci gradualmente al caso base.

Quando chiami countdown(3), stampa 3, poi chiama countdown(2), che stampa 2, poi chiama countdown(1), che stampa 1, poi chiama countdown(0), che stampa "Done!" e si ferma.

challenge icon

Sfida

Facile

Crea un programma che implementi un timer per il conto alla rovescia ricorsivo con messaggi personalizzati. Il programma mostrerà la ricorsione contando alla rovescia a partire da un numero specificato e visualizzando messaggi personalizzati a ogni passaggio.

  1. Leggi un input di tipo stringa che rappresenta il numero iniziale del conto alla rovescia
  2. Leggi un input di tipo stringa che rappresenta un prefisso personalizzato per il messaggio (ad es., "Launch in", "Timer" o "Countdown")
  3. Converti il primo input in un intero usando int.parse()
  4. Crea una funzione ricorsiva chiamata customCountdown che accetta due parametri:
    • Un intero number che rappresenta il valore corrente del conto alla rovescia
    • Una stringa messagePrefix per il messaggio personalizzato
  5. La funzione deve implementare la seguente logica:
    • Caso base: se il numero è minore o uguale a 0, stampa "Countdown complete!" e return
    • Passaggio ricorsivo: stampa il prefisso del messaggio seguito dal numero corrente, quindi richiama la funzione con number - 1
  6. Chiama la funzione customCountdown con il numero convertito e il prefisso del messaggio
  7. Visualizza i risultati esattamente nel formato mostrato qui sotto

Ad esempio, se gli input sono "5" e "Launch in", il programma deve produrre:

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 gli input sono "3" e "Timer", il programma deve produrre:

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

Se gli input sono "0" e "Ready", il programma deve produrre:

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

Il programma deve implementare la funzione ricorsiva customCountdown, che richiama sé stessa con un numero decrementato fino a raggiungere il caso base. A ogni chiamata ricorsiva, la funzione deve stampare il messaggio personalizzato con il numero corrente, mostrando come la ricorsione scompone il problema in sottoproblemi identici e più piccoli. Usa l’interpolazione di stringhe per formattare i messaggi del conto alla rovescia come "$messagePrefix $number".

Provalo tu

import 'dart:io';

// TODO: Crea qui la tua funzione customCountdown
// Ricorda di gestire il caso base (number <= 0) e il passo ricorsivo

void main() {
  // Leggi l'input
  String? startingNumber = stdin.readLineSync();
  String? messagePrefix = stdin.readLineSync();
  
  // Converti la stringa in un numero intero
  int number = int.parse(startingNumber!);
  
  // Mostra le informazioni iniziali
  print('Starting countdown from: $number');
  print('Message prefix: $messagePrefix');
  print('========================');
  
  // TODO: Chiama qui la tua funzione customCountdown
  // Ricorda di gestire la sicurezza rispetto ai valori null per messagePrefix
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online