 Introduction and word of the author
 What is recursion?
 From while/for loops to recursion
 Chapter 1: Recursion and arrays
 Array sum
 Stack
 Largest number in array
 Smalles number in array
 Flatten nested array
 Even numbers
 Multiply numbers in array
 Chapter 2: Recursion and strings
 Recursive string reversal
 Get number from a string
 Palindrome
 Shortest word in string
 Nested string
 Chapter 3: Recursion and linked lists
 Appending data to linked list
 Delete node at k index
 Reversing linked list with recursion
 Logging linked list data

Chapter 4: Recursion and binary trees
 Creating a binary tree and appending data to it
 Minimum value in binary tree
 Maximum value in binary tree
 Deep first search

Chapter 5: Recursion and backtracking
 Permutations
 Subsets
 Combinations

Chapter 6: Memoization and Tail recursion
 Memoization
 Tail recursion
 Chapter 7: Inner game of recursion
 Recursive leap of faith
 Final words
Introduction and word of the author
Hello and welcome to the book! In this book, I will teach you how to use recursion and most importantly you will gain an understanding of what recursion is.
Recursion is a hard topic to grasp (I know because it took me a while to understand it).
Recursion is a beautiful concept and it will help you solve many hard problems easily.
I just want you to know that you can do it! You can learn recursion. I will teach you how to to use recursion on arrays, strings, nested objects (trees). I will give you step by step examples, so you can see how recursion works under the hood and effects that have on memory.
In book I will use JavaScript programming language. I will assume that you have basic knowledge of programming.
Just a disclaimer, in the book the function declarations are used. It is easier for beginners to grasp recursion, instead using arrow functions. Arrows functions are used for callbacks. I hope you enjoy the book!
What is recursion?
A recursive function is a function that it calls itself. Simple as that! Let me give you an example:
That right there is recursion! But wait! If you run the code, it will run infinitely number of times (or until you have memory). (Do not run this code, it will freeze your browser or browser tab, it is just for demonstrating purpose)
We need a way to stop the recursion
We need some condition that when is met it will stop calling the function.
That condition is called a base case
[1]  This is a base case, the place where a function is stopped and returns an n.
[2]  Here the n is incremented by one.
Look at this, you can console.log the n, just like in normal loop.
It will log numbers until 10. Simple, right?
From while/for loops to recursion
You saw on the last few pages what recursion is. Let’ s convert some while/for loops to recursion, so you can start using recursion right away instead of normal loops!
Simple!
Now, let' s start adding multiple arguments!
Here we have a recursive function with two parameters. You can put as many parameters as you want. Parameter k is always the same number. And we increment n by one. Let us see another example:
I hope you understand now recursion on the basic level, and you know how to use it instead of basic loops. Good job! Let us keep moving forward!
Chapter 1: Recursion and arrays
Let us see how we can use recursion with arrays!
First, let us sum the array! Pretty simple, but pay attention!
Array sum
How come this works? Let me introduce you to new concept called the Stack
A stack is a LIFO ( Last In First Out) data structure.
This means that every recursive function call is put on top of the stack and removed from the stack when the recursive call is done! Let us analyze step by step sumArr function
Step 1 > 1 + sumArr([2,3,4]);
Step 2 > 1 + 2 + sumArr([3,4]);
Step 3 > 1 + 2 + 3 + sumArr([4]);
Step 4 > 1 + 2 + 3 + 4 + sumArr([]);
Okay, we got to the end of the stack, what now? The recursion has reached base case. Now the stack unwinds! Remember how I told you that stack is LIFO (Last In First Out). Watch!
 1 + sumArr([2,3,4])
 1 + 2 + sumArr([3,4]);
 1 + 2 + 3 + sumArr([4])
 1 + 2 + 3 + 4 + sumArr([])
Yea! We got the right summed number. This is how recursion works behind the scene. Very nice, right? I want you to see how we can iterate array with recursion.
We splice array items by one, meaning array length will change the more computer puts functions on the stack.