Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 30230dc

Browse files
Implemented recursive & iterative fibonacci (#9 IP)
1 parent 3dca3ce commit 30230dc

File tree

7 files changed

+114
-5
lines changed

7 files changed

+114
-5
lines changed

‎Algorithms/README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Algorithms
22

33
## Core
4-
- [] Recursion
4+
- [X] Recursion
55
- [ ] Dynamic Programming
66
- [ ] Comparison Sorting
77
- [ ] *Merge Sort*
@@ -16,4 +16,7 @@
1616
- [ ] Depth First Search (DFS)
1717

1818
## Resources
19-
- [Visualizing Data Structures & Algorithms](https://visualgo.net/en)
19+
- [Visualizing Data Structures & Algorithms](https://visualgo.net/en)
20+
21+
### Recursion
22+
- [Tail Call Optimization: ES6](https://2ality.com/2015/06/tail-call-optimization.html)

‎Algorithms/Recursion/Basics.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
function inception(repeat: number): string {
22
// 1. Base Case(s)
33
if (repeat === 0) return 'Done!\n'; // Base Case(s) must be written first in method
4-
// 2. Input Validation
5-
if (repeat < 1) return 'Too small!\n'; // Input validation must occur after base case(s)
4+
// 2?. Input Validation
5+
if (repeat < 1) return 'Too small!\n'; // Input validation should occur after base case(s)
66

77
console.log('Counter:', repeat);
88

‎Algorithms/Recursion/Fibonacci.ts

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
// ---------------- Fibonacci Sequence ----------------
2+
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...
3+
4+
// Time Complexity: O(2^n) Space Complexity: O(2^n)
5+
function fibonacciRecursive(nthElement: number): number | any {
6+
// Base Cases
7+
if (nthElement === 1) return 0;
8+
if (nthElement === 2) return 1;
9+
//Input Validation
10+
if (nthElement < 1) return undefined;
11+
12+
// Recursive Call: The nth element equals the sum of the previous 2 elements.
13+
return fibonacciRecursive(nthElement-2) + fibonacciRecursive(nthElement-1);
14+
}
15+
16+
// Time Complexity: O(n) Space Complexity: O(1)
17+
function fibonacciIterative(nthElement: number): number | undefined {
18+
if (nthElement < 1) return undefined;
19+
else nthElement = Math.floor(nthElement);
20+
21+
let previous = 0;
22+
let current = 1;
23+
24+
if (nthElement === 1) return previous;
25+
if (nthElement === 2) return current;
26+
27+
let fibonacci: number = 0;
28+
29+
for (let i = 3; i <= nthElement; ++i) {
30+
fibonacci = previous + current;
31+
previous = current;
32+
current = fibonacci;
33+
}
34+
35+
return fibonacci;
36+
}
37+
38+
function validateFibonacciInput(nthElement: number) {
39+
return nthElement>0;
40+
}
41+
42+
function printFibonacciIterative(nthElement: number) {
43+
console.log("Fibonacci Iterative", nthElement+':', fibonacciIterative(nthElement));
44+
}
45+
46+
function printFibonacciRecursive(nthElement: number) {
47+
if(!validateFibonacciInput(nthElement)) {
48+
console.log("Input", nthElement, "is invalid -_-'");
49+
return;
50+
}
51+
console.log("Fibonacci Recursive", nthElement+':', fibonacciRecursive(nthElement));
52+
}
53+
54+
//---------------------------------------------------------------------
55+
// ---------- MAIN PROGRAM ----------
56+
//---------------------------------------------------------------------
57+
if (import.meta.main) {
58+
59+
console.log('------------ Iterative ------------');
60+
printFibonacciIterative(0);
61+
printFibonacciIterative(1);
62+
printFibonacciIterative(2);
63+
printFibonacciIterative(3);
64+
printFibonacciIterative(4);
65+
printFibonacciIterative(5);
66+
printFibonacciIterative(6);
67+
printFibonacciIterative(9);
68+
printFibonacciIterative(42);
69+
printFibonacciIterative(50);
70+
printFibonacciIterative(100);
71+
console.log('\n------------ Recursive ------------');
72+
printFibonacciRecursive(-1);
73+
printFibonacciRecursive(0);
74+
printFibonacciRecursive(1);
75+
printFibonacciRecursive(2);
76+
printFibonacciRecursive(3);
77+
printFibonacciRecursive(4);
78+
printFibonacciRecursive(5);
79+
printFibonacciRecursive(7);
80+
printFibonacciRecursive(8);
81+
printFibonacciRecursive(42); // Notice how much longer this takes than the iterative version
82+
83+
// RUN: deno run Algorithms/Recursion/Fibonacci.ts
84+
}
85+
86+
// --------------------------- Terminal Output: ---------------------------
87+
// ------------ Iterative ------------
88+
// Fibonacci Iterative 0: undefined
89+
// Fibonacci Iterative 1: 0
90+
// Fibonacci Iterative 2: 1
91+
// Fibonacci Iterative 3: 1
92+
// Fibonacci Iterative 4: 2
93+
// Fibonacci Iterative 5: 3
94+
// Fibonacci Iterative 6: 5
95+
// Fibonacci Iterative 9: 21
96+
97+
// ------------ Recursive ------------
98+
// Input -1 is invalid -_-'
99+
// Input 0 is invalid -_-'
100+
// Fibonacci Recursive 1: 0
101+
// Fibonacci Recursive 2: 1
102+
// Fibonacci Recursive 3: 1
103+
// Fibonacci Recursive 4: 2
104+
// Fibonacci Recursive 5: 3
105+
// Fibonacci Recursive 7: 8
106+
// Fibonacci Recursive 8: 13

‎Playground/Challenges/Recursion/ReverseString.ts

Whitespace-only changes.
File renamed without changes.
File renamed without changes.

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
- [X] Graphs
1818

1919
### Algorithms
20-
- [] Recursion
20+
- [X] Recursion
2121
- [ ] Dynamic Programming
2222
- [ ] Comparison Sorting
2323
- [ ] *Merge Sort*

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /