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: “);  visualizzazione prompt
scanf(“%d”, &dato);
if(n < MAX_N)

valore = fatt(dato);
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

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);
 lettura dato = 4
if(n < MAX_N)

valore = fatt(dato);
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

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)
 test validità

valore = fatt(dato);
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

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);  chiama fatt(4)
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

Istanza n.1 della funzione fatt
int fatt( int n)  Fatt (n=4)

int n_fatt;
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.1 della funzione fatt
int fatt( int n) (n=4)

int n_fatt;
 test non verificato
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

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)
 fatt(n=3)

int n_fatt;
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.2 della funzione fatt
int fatt( int n) (n=3)

int n_fatt;
 Test non verificato
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

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)
 fatt(n=2)

int n_fatt;
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.3 della funzione fatt
int fatt( int n) (n=2)

int n_fatt;
if(n == 0)  Test non verificato
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

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)  fatt(n=1)

int n_fatt;
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.4 della funzione fatt
int fatt( int n) (n=1)

int n_fatt;
if(n == 0)  Test non verificato
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

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)
 fatt(n=0)

int n_fatt;
if(n == 0)
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.5 della funzione fatt
int fatt( int n) (n=0)

int n_fatt;
if(n == 0)  Test verificato
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

Istanza n.5 della funzione fatt
int fatt( int n) (n=0)

int n_fatt;
if(n == 0)
 n_fatt = 1
n_fatt = 1;
else
n_fatt = n  fatt(n-1);
return(n_fatt);

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);
 valore = 24
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

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);
 stampa: 4! = 24
printf(“%d! = %d\n”, n, valore);

else
printf(“Errore: valore troppo grande\n”);

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
Scarica

Simulazione_ricorsione