Algoritmi C/C++

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++

C
Esegui →
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));
}
Output previsto
720
C++
Esegui →
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';
}
Output previsto
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.