360 likes | 520 Views
La ricorsione. Simulazione. Il Main. /* Programma che usa una funzione ricorsiva*/ #include <stdio.h> #define MAX_N 8 main() int valore, dato; printf(“Introduci n: “); scanf(“%d”, &dato); if(n < MAX_N) valore = fatt(dato); printf(“%d! = %d<br>”, n, valore); else
E N D
La ricorsione Simulazione
Il Main /* Programma che usa una funzione ricorsiva*/ #include <stdio.h> #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 <stdio.h> #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 <stdio.h> #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 <stdio.h> #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 <stdio.h> #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 l’esecuzione del return, l’istanza 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 <stdio.h> #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 <stdio.h> #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 <stdio.h> #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