## DEV Community is a community of 605,533 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# What is Recursion?

The act of a function calling itself, recursion is used to solve problems that contain smaller sub-problems. A recursive function can receive two inputs: a base case (ends recursion) or a recursive case (resumes recursion). https://developer.mozilla.org/en-US/docs/Glossary/Recursion

• A function that calls itself and has a base & recursive case. The function will essentially reinvoke itself until it arrives at a result.

## Two Cases Explained

• Base Case - At one point do we need to return our answer? When do we need to stop?
• Recursive Case - How do we manipulate our argument or how can we adjust the argument for another reinvocation?

## Example - countSheep()

Create a function countSheep() that outputs "1 sheep..." all the way up to the input number "x sheep..."

Let's solve by using the PREP technique

• P - integer (x) for number of sheep, default argument of count = 0 to keep track of current sheep number
• R - log out sheep from 1 to x
• E - see below
``````// countSheep(3)
// 1 sheep...
// 2 sheep...
// 3 sheep...

``````
• P - see below

Base Case - return when all the sheep are counted (count === x)
Recursive Case - modify count by adding 1, return a console of the current count + a reinvocation w/ x and modified count

``````function countSheep(x, count=0) {
// BASE CASE
// return if count equals x, which means every sheep is counted

// RECURSIVE CASE
// modify argument by adding 1 to count
// log current count & reinvoke w/ modification
}

``````

Now, implement code logic.

``````function countSheep(x, count=0) {
// BASE CASE
// return if count equals x, which means every sheep is counted
if (count === x ) return;

// RECURSIVE CASE
// modify argument by adding 1 to count
count++
// log current count & reinvoke w/ modification
return console.log(x + ' sheep...') + countSheep(x, count)
}
``````

## Conclusion

When finding a recursive solution, always keep in mind what the base case and recursive case may be. It's a good way to start!

& Remember... Happy coding, friends! =)