summaryrefslogtreecommitdiff
path: root/fib.c
diff options
context:
space:
mode:
Diffstat (limited to 'fib.c')
-rw-r--r--fib.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/fib.c b/fib.c
index 7525d1b..fffd94f 100644
--- a/fib.c
+++ b/fib.c
@@ -1,26 +1,34 @@
#include <stdio.h>
#include <assert.h>
+// 1. base case -> ends the loops
+// 2. recurrence
int fib(int n)
{
- if (n == 1) {
- return 0;
+ if (n <= 1) {
+ printf("%d: %d + %d = %d\n", n, n, n + n);
+ return n;
}
- if (n == 2 || n == 3) {
- return 1;
- }
+ int y = fib(n - 2);
+ int x = fib(n - 1);
+ printf("%d: %d + %d = %d\n", n, x, y, x+y);
- return 2;
+ return x + y;
}
int main(int argc, char *argv[])
{
- assert(fib(1) == 0);
+ assert(fib(-2) == 0);
+ assert(fib(-1) == 0);
+ assert(fib(0) == 0);
+ assert(fib(1) == 1);
assert(fib(2) == 1);
- assert(fib(3) == 1);
- assert(fib(4) == 2);
+ assert(fib(3) == 2);
+ assert(fib(4) == 3);
+ assert(fib(12) == 144);
+ printf("%d\n", fib(100));
printf("YAY!\n");
return 0;