Manugal
03-03-2006, 16:16
Ciao! :)
Oggi mi hanno spiegato alcune cose sulla ricorsività e come esempio è stato fatto quello della successione di Fibonacci. Praticamente per avere un numero minore di chiamate alla funzione rispetto all'implementazione classica, abbiamo implementato un algoritmo che memorizzasse in un array i valori già calcolati. Questo è l'algoritmo:
#include <stdio.h>
#include <stdlib.h>
int fib(int);
int valori[100]={0};
int main(void){
int n=5,ris;
ris=fib(n);
printf("%d", ris);
return 0;
}
int fib(int n){
if(valori[n]>0)
return valori[n];
if(n==0)
valori[n]=0;
if(n==1)
valori[n]=1;
else
valori[n]=fib(n-1)+fib(n-2);
return valori[n];
}
Quello che non riesco a capire è come si comporta l'indice dell'array (dato che è uguale a n). Infatti eseguendo questo programma (che mi dovrebbe restituire 5), mi restituisce 24042062. Come mai? Grazie.
Oggi mi hanno spiegato alcune cose sulla ricorsività e come esempio è stato fatto quello della successione di Fibonacci. Praticamente per avere un numero minore di chiamate alla funzione rispetto all'implementazione classica, abbiamo implementato un algoritmo che memorizzasse in un array i valori già calcolati. Questo è l'algoritmo:
#include <stdio.h>
#include <stdlib.h>
int fib(int);
int valori[100]={0};
int main(void){
int n=5,ris;
ris=fib(n);
printf("%d", ris);
return 0;
}
int fib(int n){
if(valori[n]>0)
return valori[n];
if(n==0)
valori[n]=0;
if(n==1)
valori[n]=1;
else
valori[n]=fib(n-1)+fib(n-2);
return valori[n];
}
Quello che non riesco a capire è come si comporta l'indice dell'array (dato che è uguale a n). Infatti eseguendo questo programma (che mi dovrebbe restituire 5), mi restituisce 24042062. Come mai? Grazie.