/* primer44.c - faktorijel */ #include int factoriel( int ); int fact_rep( int, int ); int fact_iter( int, int ); int fact( int ); main() { int i, N, f; scanf("%d", &N); /* N! - rekurzivno */ f = factoriel( N ); printf("%d! = %d\n", N, f ); /* N! - rekurzivno sa repnom rekurzijom */ f = fact_rep( N, 1 ); printf("%d! = %d\n", N, f ); /* N! - eliminacija repne rekurzije */ f = fact_iter( N, 1 ); printf("%d! = %d\n", N, f ); /* N! - eliminacija parametra */ f = fact( N ); printf("%d! = %d\n", N, f ); } int factoriel( int n ){ if( n == 0 ) return 1; /* Ovde nema reprne rekurzije */ else return n * factoriel( n - 1 ); } int fact_rep( int n, int m ) { if( n == 0 ) return m; /* Transformacija u funkciju sa repnom rekurzijom */ else return fact_rep( n-1, n * m ); } int fact_iter( int n, int m ) { while( n > 0 ) { m = n * m; n = n -1; } return( m ); } int fact( int n ) { int m = 1; while( n > 0 ) m *= n--; return m; }