/* File: fibonacc.c */
/* Time-stamp: "2001-03-26 02:54:24 calvanes" */
/* Scopo: esempio di funzione ricorsiva con ricorsione multipla */


/* 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 fibonacci(long i)
  /* Calcola l'i-esimo numero di Fibonacci.
     Si utilizza il tipo long in quanto i numeri di Fibonacci crescono molto
     velocemente.
  */
{
  if (i < 0) return -1;       /* F(i) non e` definito per interi i negativi! */

  if (i == 0)
    return 0;
  else if (i == 1)
    return 1;
  else
    return fibonacci(i-1) + fibonacci(i-2);
}


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));
  return 0;
}