Skip to content

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;
}

Made with ❤️ for students, by a fellow learner.