Task: Implement recursive versions and compare to iterative implementations. Emphasize base cases and termination (keep n small for recursive Fibonacci).
#include <stdio.h>
long long fact_rec(int n){ return (n<=1)?1:n*fact_rec(n-1); }
long long fact_itr(int n){ long long f=1; for(int i=2;i<=n;++i) f*=i; return f; }
long long fib_rec(int n){ return (n<=1)?n:fib_rec(n-1)+fib_rec(n-2); }
long long fib_itr(int n){ long long a=0,b=1,t; for(int i=0;i<n;++i){ t=a+b; a=b; b=t; } return a; }
int main(void){
int n;
printf("Enter n (<=20 for demo): ");
if(scanf("%d", &n)!=1 || n<0){ printf("Invalid n.\n"); return 0; }
printf("fact_rec(%d) = %lld\n", n, fact_rec(n));
printf("fact_itr(%d) = %lld\n", n, fact_itr(n));
printf("fib_rec(%d) = %lld (slow for large n)\n", n, fib_rec(n));
printf("fib_itr(%d) = %lld\n", n, fib_itr(n));
return 0;
}