/* File: fibodeb.c */ /* Time-stamp: "2001-03-27 01:51:45 calvanes" */ /* Scopo: esempio di funzione ricorsiva con ricorsione multipla; versione adatta per seguire le attivazioni e visualizzare lo stack delle chiamate con il debugger */ /* Funzione ricorsiva che dato un numero i >= 0 calcola il numero di Fibonacci i-esimo: L'i-esimo numero di Fibonacci F(i) e` definito attraverso la seguente definizione induttiva: F(i) = 0 se i = 0 F(i) = 1 se i = 1 F(i) = F(i-1) + F(i-2) se i >= 2 */ #include <stdio.h> long conta = 0; /* contatore del numero di attivazioni di fibonacci */ long fibonacci(long i) /* Calcola l'i-esimo numero di Fibonacci. Si utilizza il tipo long in quanto i numeri di Fibonacci crescono molto velocemente. */ { long f1, f2, fibo; conta++; if (i == 0) fibo = 0; else if (i == 1) fibo = 1; else { f1 = fibonacci(i-1); f2 = fibonacci(i-2); fibo = f1 + f2; } return fibo; } int main(void) { long n; printf("Inserire un intero >= 0: "); scanf("%ld", &n); printf("L' %ldo numero di Fibonacci e` %ld\n", n, fibonacci(n)); printf("Il numero di attivazioni per calcolarlo e` %ld\n", conta); return 0; }