#include #include const int SUCCESS = 0; const int FAILURE = 1; int factorial_iterative(int x, int* result) { if (x < 0) return FAILURE; if (x == 0) { *result = 1; return SUCCESS; } *result = 1; while (x > 0) { *result *= x--; } return SUCCESS; } int factorial_recursive(int x, int* result) { if (x < 0) return FAILURE; if (x == 0 || x == 1) { *result = 1; return SUCCESS; } int tmp = x; int rc = factorial_recursive(x-1, &tmp); if ( SUCCESS != rc ) return FAILURE; *result = x * tmp; return SUCCESS; } int main(int argc, char** argv) { int result, rc; if ( argc != 2) { printf("usage: %s input_num\n", argv[0]); return FAILURE; } rc = factorial_iterative(atoi(argv[1]), &result); if (SUCCESS == rc) printf("iterative %d\n", result); else printf("iterative failure\n"); rc = factorial_recursive(atoi(argv[1]), &result); if (SUCCESS == rc) printf("recursive %d\n", result); else printf("recursive failure\n"); return SUCCESS; }