A Simple introduction to recursion
Tags: javascript, recursion, beginners
Published: 2020-11-01 13:41:39

Recursion is one of the topics that confuses people when seeing it for the first time,  this article introduces the main idea of recursion in order to make things a little bit clearer and get you up and running with it.

#What exactly is recursion ? 
It's easier to understand it through an example

Say you were asked to calculate the sum of 13 and 18, most of us thinks about it like this: 
- since 10 + 10 = 20
- and 3 + 8 = 11
- so the sum is 20 + 11 = 31

what exactly did we do here ? 

instead of calculating the sum right away, we *broke* 
the problem into *two small problems* of the same type, the difference is that we can easily solve the *two small problems*.

That's exactly what recursion is all about, it's about breaking a problem into several small problems that are easier to solve.

## Enough talking, let's write some code

Now that you (hopefully) understand the main idea behind recursion, let's see how can we implement it.

Let's start by writing a function that counts from a given number `n` up to `5` in our console, this is done very easily using a loop like this: 

```
function countTo5(n){ 
    for(let i =n; i<=5; i++){ 
        console.log(i)
    }
}

countTo5(1)
```
but let's try doing it with recursion (**Make sure you read the comment in the code below in order to understand how it works**)

```
function countTo5(n){ 
   if(n === 5) { 
       console.log(n)
       return;
   }
   console.log(n);

   return countTo5(n+1)
}

countTo5(1)
/* 
    first call
    n = 1 
    1===5 ? no 
    console.log(1)
    return countTo5(2)
    -----------------
    second call 
    n = 2
    2===5 ? no 
    console.log(2)
    return countTo5(3)
    -----------------
    third call 
    n = 3
    3===5 ? no 
    console.log(3)
    return countTo5(4)
    ------------------
    forth call 
    n = 4
    4===5 ? no 
    console.log(4)
    return countTo5(5)
    ------------------
    fifth call 
    n = 5
    5===5 ? yes
    console.log(5)
    the function stops
*/
```
*note: it's absolutely better to solve it with loops, recursion is used here for explanation purposes only*

##Base Case
A loop becomes infinite if we don't have a stopping condition. similar to loops, if recursion doesn't have something that makes it stop it will execute over and over until it causes a [stack overflow](https://www.freecodecamp.org/news/understanding-the-javascript-call-stack-861e41ae61d4/). 

in the example above, our base case was this if statement
 ` if(n === 5) { 
       console.log(n)
       return;
   }`   

In most cases the base case is going to be a conditional statement. 

###conclusion 
1. recursion is a way of solving problems by breaking it into smaller problems

2. we can say that recursion is an elegant way of looping 

3. we must have a base case in our recursion or else we'll get stack overflow

Hope this helps guys, this is my first article ever so I'd love to know your opinions about it, hopefully it becomes first of many useful article, here is some further reading and videos 

-https://javascript.info/recursion#two-ways-of-thinking

-https://www.youtube.com/watch?v=lMBVwYrmFZQ

-https://www.youtube.com/watch?v=k7-N8R0-KY4

-https://www.freecodecamp.org/news/understanding-recursion-in-javascript/