/************************************************/
/* soubor FACT_RST.C */
/* faktorial rekursi se statickou promennou */
/************************************************/
#include <stdio.h>
double fact(long n)
{
static int h;
double navrat;
printf("hloubka=%4d\tn=%4ld\n", ++h, n);
if (n == 0l)
navrat = 1.0F;
else
navrat = n * fact(n-1);
printf("hloubka=%4d\tn=%4ld\tnavrat=%.0lf\n", h--, n, navrat);
return navrat;
}
int main(void)
{
static long n;
printf("\nPro vypocet faktorialu zadej prirozene cislo n:");
scanf("%ld", &n);
printf("%ld! = %lf\n", n, fact(n));
return 0;
}
/*
Pro vypocet faktorialu zadej prirozene cislo n:4
hloubka= 1 n= 4
hloubka= 2 n= 3
hloubka= 3 n= 2
hloubka= 4 n= 1
hloubka= 5 n= 0
hloubka= 5 n= 0 navrat=1
hloubka= 4 n= 1 navrat=1
hloubka= 3 n= 2 navrat=2
hloubka= 2 n= 3 navrat=6
hloubka= 1 n= 4 navrat=24
4! = 24.000000
*/