Ricorsione e call stack
Ogni funzione ricorsiva richiede base case e progresso.
Che cos’è Ricorsione e call stack?
Ogni funzione ricorsiva richiede base case e progresso.
Risolvi un problema tramite un’istanza più piccola.
Punti importanti
- Testa input vuoti, singoli, duplicati e ordinati.
- Separa correttezza e ottimizzazione.
- Preferisci la standard library in produzione.
Esempi di codice C e C++
main.c
#include <stdio.h>
unsigned long long factorial(unsigned number) {
return number < 2 ? 1 : number * factorial(number - 1);
}
int main(void) {
printf("%llu\n", factorial(6));
}
720
C++
main.cpp
#include <iostream>
constexpr unsigned long long factorial(unsigned number) {
return number < 2 ? 1 : number * factorial(number - 1);
}
int main() {
constexpr auto value = factorial(6);
std::cout << value << '\n';
}
720
Confronto tra C e C++
Il fattoriale usa O(n) tempo e O(n) stack; input grandi richiedono validazione e spesso una soluzione iterativa.
C
Loop, puntatori, dimensioni e buffer sono espliciti.
C++
Iteratori e algoritmi separano operazione e storage.
Esercizi pratici
Esegui entrambe le versioni e modificale per osservare le diverse garanzie.
- Traccia ogni confronto.
- Testa duplicati e valori estremi.
- Confronta con la standard library.