/* File: fattdeb.c */
/* Time-stamp: "2001-03-27 20:31:41 calvanes" */
/* Scopo: primo esempio di funzione ricorsiva con valore di ritorno;
          versione adatta per seguire le attivazioni e visualizzare lo stack
          delle chiamate con il debugger
*/

/* Funzione ricorsiva che calcola il fattoriale di un intero nonnegativo
   Si ricorda che il fattoriale n! e' definito come:

     n! = 1         se n = 0
     n! = n*(n-1)!  se n > 0
*/

#include <stdio.h>


long fattoriale(long n)
  /* Calcola il fattoriale di un intero nonnegativo.
     Si utilizza il tipo long in quanto il fattoriale cresce molto velocemente.
  */
{
  long fatt, prec;

  if (n == 0)
    fatt = 1;
  else {
    prec = fattoriale(n-1);
    fatt = n * prec;
  }

  return fatt;
}


int main(void)
{
  long n;

  printf("Inserire un intero >= 0: ");
  scanf("%ld", &n);
  printf("Il fattoriale di %ld e` %ld\n", n, fattoriale(n));
  return 0;
}