01: // ricorsione + dynamic programming, prefisso static
02: #include<stdio.h>
03: #include<stdlib.h>
04: 
05: 
06: unsigned long fibonacci(unsigned long n);
07: 
08: int main(int argc, char **argv){
09:   unsigned int n;
10: 
11:   printf("Inserisci l'indice del numero di Fibonacci da calcolare: ");
12:   scanf("%u", &n);
13: 
14:   printf("Il numero di Fibonacci di indice %u vale %lu\n", n, fibonacci(n));
15: 
16: 
17:   return 0;
18: }
19: 
20: #define NGRANDE 2000
21: unsigned long fibonacci(unsigned long n)
22: {
23:   static unsigned long Fibos[NGRANDE]={0,1}; // static rende questa variabile a durata fissa
24: 
25:   printf("DEBUG: sono stata chiamata con n=%ld\n", n);
26: 
27:   if(!n) return 0;
28:   if(Fibos[n]) return Fibos[n]; // se l'ho gia' calcolato inutile ricalcolarlo!
29:   Fibos[n] = fibonacci(n-2)+fibonacci(n-1);
30:   return Fibos[n];
31: }
32: 


Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it