La ricorsione Simulazione
Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n);
La funzione ricorsiva fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt);
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); visualizzazione prompt
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); lettura dato = 4
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); test validità
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); chiama fatt(4)
Istanza n.1 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Fatt (n=4)
Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); test non verificato
Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(3)
Istanza n.2 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=3)
Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato
Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(2)
Istanza n.3 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=2)
Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato
Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(1)
Istanza n.4 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=1)
Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato
Istanza n.4 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(0)
Istanza n.5 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=0)
Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test verificato
Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 1
Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 1
Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Con lesecuzione del return, listanza attuale scompare
Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 1 1 = 1
Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 1
Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 2 1 = 2
Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 2
Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 3 2 = 6
Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 6
Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 4 6 = 24
Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 24
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); valore = 24
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); stampa: 4! = 24
Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); Fine programma