Program 6 : Factorial
Develop a program to compute Factorial of n Using Recursion non-recursion procedure. Repeat the experiment for different values of n and plot a graph of the time taken versus n.
Factorial (Recursive and Non-Recursive)
c
#include <stdio.h>
unsigned long long factorial_recursive(int n) {
if (n == 0 || n == 1)
return 1;
return n * factorial_recursive(n - 1);
}
MAX = 20;
unsigned long long factorial_non_recursive(int n) {
unsigned long long result = 1;
for (int i = 2; i <= n; i++)
result *= i;
return result;
}
int main() {
int n;
printf("Enter a positive integer(<= %d%): ", MAX);
scanf("%d", &n);
if (n < 0 || n > MAX_N) {
printf("Invalid input. Must be between 0 and %d.\n", MAX_N);
return 1;
}
unsigned long long result_recursive = factorial_recursive(n);
unsigned long long result_non_recursive = factorial_non_recursive(n);
printf("\nFactorial of %d using recursion: %llu\n", n, result_recursive);
printf("Factorial of %d using non-recursion: %llu\n", n, result_non_recursive);
return 0;
}
For Time Calculation
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 20
unsigned long long factorial_recursive(int n) {
if (n == 0 || n == 1)
return 1;
return n * factorial_recursive(n - 1);
}
unsigned long long factorial_non_recursive(int n) {
unsigned long long result = 1;
for (int i = 2; i <= n; i++)
result *= i;
return result;
}
int main() {
int n;
clock_t start, end;
double time_recursive, time_iterative;
printf("Enter a positive integer (<= %d): ", MAX_N);
scanf("%d", &n);
if (n < 0 || n > MAX_N) {
printf("Invalid input. Must be between 0 and %d.\n", MAX_N);
return 1;
}
// Measure recursive
start = clock();
unsigned long long fact_rec = factorial_recursive(n);
end = clock();
time_recursive = (double)(end - start) / CLOCKS_PER_SEC;
// Measure non-recursive
start = clock();
unsigned long long fact_iter = factorial_non_recursive(n);
end = clock();
time_iterative = (double)(end - start) / CLOCKS_PER_SEC;
// Output results
printf("\nFactorial of %d (recursive): %llu\n", n, fact_rec);
printf("Time taken (recursive): %.8f seconds\n", time_recursive);
printf("\nFactorial of %d (non-recursive): %llu\n", n, fact_iter);
printf("Time taken (non-recursive): %.8f seconds\n", time_iterative);
return 0;
}