// Recursive 遞迴的好處就是想好了就寫好了, 因為怎模想就怎麼寫 :-) //fact.c --- @CopyLeft by tsaiwn@csie.nctu.edu.tw // C99 認識 long long 用 64 bits 可算到 20 ! 但 21! 還是掛掉 #include long long fact(int n) { if(n == 0) return 1; // 0! 是 1 return n * fact( n-1 ); // n階乘就是 n 乘以 n-1 階乘 } long ha(int n) { // 用 long 只能算到 12 ! 之後的就掛了 if(n < 0) return -ha( -n ); // 負的 -n 階乘 if(n == 0) return 1; // 0! 是 1 return n * ha( n-1 ); // n階乘就是 n 乘以 n-1 階乘 } int main ( ) { int i; #ifdef __TURBOC__ printf(" ..TC++3.x NOT supports long long.\n"); #endif for(i=0; i <= 21; ++i) { printf("%2d! = ", i); #ifdef __MINGW32__ printf("%I64d", fact(i) ); // DEV-C++ use MINGW32 gcc #else printf("%lld", fact(i) ); // other C/C++ long long 要用 %lld 喔 #endif //printf("%I64d", fact(i) ); // 注意 DEV C++ 用 %I64d printf("\n"); } for(i=0; i <= 18; ++i) printf("ha(%2d)= %ld\n", i, ha(i)); // 注意是 Long return 0; } /*********** 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 11! = 39916800 12! = 479001600 13! = 6227020800 14! = 87178291200 15! = 1307674368000 16! = 20922789888000 17! = 355687428096000 18! = 6402373705728000 19! = 121645100408832000 20! = 2432902008176640000 21! = -4249290049419214848 ha( 0)= 1 ha( 1)= 1 ha( 2)= 2 ha( 3)= 6 ha( 4)= 24 ha( 5)= 120 ha( 6)= 720 ha( 7)= 5040 ha( 8)= 40320 ha( 9)= 362880 ha(10)= 3628800 ha(11)= 39916800 ha(12)= 479001600 ha(13)= 1932053504 ha(14)= 1278945280 ha(15)= 2004310016 ha(16)= 2004189184 ha(17)= -288522240 ha(18)= -898433024 ************************//////