From 4a346e5dd9c8697ab159b2cb442543b564cb7498 Mon Sep 17 00:00:00 2001 From: froge Date: Thu, 31 Jul 2025 17:26:21 +1000 Subject: [PATCH] Initial commit --- README.md | 1 + factorial.c | 37 +++++++++++++++++++++++++++++++++++++ factorial.py | 20 ++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 README.md create mode 100644 factorial.c create mode 100644 factorial.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..80a3b3c --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Some example factorial functions in various programming languages diff --git a/factorial.c b/factorial.c new file mode 100644 index 0000000..d693c01 --- /dev/null +++ b/factorial.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +uintmax_t factorial(uintmax_t n) { + if(n < 2) + return 1; + return n * factorial(n-1); +} + +uintmax_t factorial_iter(uintmax_t n) { + uintmax_t fact = 1; + uintmax_t i = 2; + while(i <= n) { + fact *= i; + i++; + } + return fact; +} + +int main(void) { + size_t bufsize = 1024; + char **lineptr = calloc(bufsize, sizeof(char)); + fputs("Enter number to factor: ", stdout); + int err = getline(lineptr, &bufsize, stdin); + if(err == -1) { + puts("Error reading line from user input"); + return 1; + } + + uintmax_t user_input = abs(atoi(*lineptr)); + printf("\nRecursive factorial for number: %ju\n", factorial(user_input)); + printf("Iterative factorial for number: %ju\n", factorial_iter(user_input)); + free(lineptr); + return 0; +} diff --git a/factorial.py b/factorial.py new file mode 100644 index 0000000..0111185 --- /dev/null +++ b/factorial.py @@ -0,0 +1,20 @@ +def factorial(n: int) -> int: + if n < 2: + return n + else: + return n * factorial(n-1) + +def factorial_iter(n: int) -> int: + fact = 1 + # Grab absolute value to ensure n is a positive integer + n = abs(n) + for i in range(2, n+1): + fact *= i + return fact + +user_input = int(input("Insert number to calculate factorial for: ")) + +# Avoid recursion limit +if user_input < 1000: + print(f"Recursive factorial {user_input}: {factorial(user_input)}") +print(f"Iterative factorial {user_input}: {factorial_iter(user_input)}")