La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define...

Post on 01-May-2015

214 views 0 download

Transcript of La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define...

La ricorsione

Simulazione

Il Main/* Programma che usa una funzione ricorsiva*/#include <stdio.h>#define MAX_N 8main()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 8main()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 8main()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 8main()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 8main()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 8main()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 8main()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 8main()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