Menu
Coddy logo textTech

Funzione ricorsiva: fattoriale

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

Il fattoriale di un numero è una classica operazione matematica, perfetta per dimostrare la ricorsione. Il fattoriale di un intero positivo n (scritto come n!) è il prodotto di tutti gli interi positivi da 1 a n. Per esempio, 5! = 5 × 4 × 3 × 2 × 1 = 120.

Ciò che rende il fattoriale ideale per la ricorsione è che si scompone naturalmente in problemi più piccoli e identici. Per calcolare 5!, puoi pensarci come 5 × 4!. E 4! è semplicemente 4 × 3!, e così via. Questo schema continua finché non raggiungi 1!, che è uguale a 1.

int factorial(int n) {
  if (n <= 1) {
    return 1; // Caso base
  }
  
  return n * factorial(n - 1); // Passo ricorsivo
}

Il caso base interrompe la ricorsione quando n <= 1, restituendo 1. Il passaggio ricorsivo moltiplica il numero corrente per il fattoriale del numero successivo più piccolo. Quando chiami factorial(5), restituisce 5 * factorial(4), che restituisce 5 * 4 * factorial(3), e così via fino a raggiungere il caso base.

Questo approccio dimostra come la ricorsione risolva elegantemente i problemi riducendoli a versioni più semplici dello stesso problema, rendendo i calcoli complessi naturali e intuitivi.

challenge icon

Sfida

Facile

Crea un programma che calcoli i fattoriali di più numeri usando la ricorsione. Il tuo programma mostrerà la funzione ricorsiva del fattoriale elaborando un elenco di numeri e calcolandone i fattoriali.

  1. Leggi una stringa di input contenente numeri separati da virgole (ad es., "3,5,0,7")
  2. Suddividi la stringa di input in singoli numeri e converti ciascuno in un intero
  3. Crea una funzione ricorsiva chiamata factorial che accetta un parametro intero n
  4. La funzione factorial deve implementare la seguente logica:
    • Caso base: Se n è minore o uguale a 1, restituisci 1
    • Passo ricorsivo: Restituisci n moltiplicato per factorial(n - 1)
  5. Per ogni numero nell'elenco di input, calcola il suo fattoriale usando la tua funzione ricorsiva
  6. Visualizza i risultati mostrando ogni numero e il fattoriale corrispondente
  7. Calcola e visualizza la somma di tutti i fattoriali ottenuti

Ad esempio, se l'input è "4,3,2", il programma dovrebbe produrre:

Factorial Calculator
====================
Processing numbers: [4, 3, 2]
====================
Factorial Results:
4! = 24
3! = 6
2! = 2
====================
Sum of all factorials: 32
Calculation completed successfully

Se l'input è "5,0,1", il programma dovrebbe produrre:

Factorial Calculator
====================
Processing numbers: [5, 0, 1]
====================
Factorial Results:
5! = 120
0! = 1
1! = 1
====================
Sum of all factorials: 122
Calculation completed successfully

Se l'input è "6", il programma dovrebbe produrre:

Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfully

Il programma deve implementare la funzione ricorsiva factorial che richiama sé stessa con valori decrementati finché non raggiunge il caso base. La funzione dovrebbe mostrare come la ricorsione scompone il calcolo del fattoriale in sottoproblemi più piccoli e identici. Usa l'interpolazione di stringhe per formattare i risultati dei fattoriali come "$n! = $result". Ricorda che 0! è uguale a 1 per definizione matematica, e il tuo caso base dovrebbe gestirlo correttamente.

Provalo tu

import 'dart:io';

// TODO: Crea qui la tua funzione ricorsiva per il calcolo del fattoriale

void main() {
  // Leggi la stringa di input contenente numeri separati da virgole
  String? input = stdin.readLineSync();
  
  // Dividi l'input e converti i valori in numeri interi
  List<int> numbers = input!.split(',').map((str) => int.parse(str.trim())).toList();
  
  // TODO: Scrivi il codice qui sotto per:
  // 1. Elaborare ogni numero usando la tua funzione per il calcolo del fattoriale
  // 2. Calcolare la somma di tutti i fattoriali
  // 3. Visualizzare i risultati nel formato richiesto
  
  print("Factorial Calculator");
  print("====================");
  print("Processing numbers: $numbers");
  print("====================");
  print("Factorial Results:");
  
  // TODO: Calcola e visualizza qui i risultati dei fattoriali
  
  print("====================");
  // TODO: Visualizza la somma di tutti i fattoriali
  print("Calculation completed successfully");
}
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