 # Replace Loops using Recursion - Base case

Hello! I was going through Basic JavaScript - Replace Loops using Recursion, and couldn’t understand the base case of the example (multiply function).

``````function multiply(arr, n) {
if (n <= 0) {
return 1;
} else {
return multiply(arr, n - 1) * arr[n - 1];
}
}
``````

I get how and why it works when n > 0. But if I call this function with n as 0,

``````multiply(arr, 0);
``````

It will return 1. Isn’t it simply wrong? Shouldn’t it return a string of error message or something?

Or is it possible to do this

``````if (n <=0) {
return "Wrong input";
}
``````

and set base case differently?

You want it to return 1 because the function calls itself with (n - 1). If I call the function with 1, then the function multiplies the array by 1, moves to 0, and returns 1.

So, let’s do `multiply([1, 2], 2)`.
First it returns `multiply([1, 2], 2 -1) * arr [2-1]`, or `multiply([1, 2], 1) * arr`.
Now it’s calling the function again. We look at that, and we get:
`multiply([1, 2], 0) * arr [1-1] * arr[2-1)`

Finally, it calls the function with `0`. Now, if we use your suggested base case of returning “wrong input”, we get:
`"wrong input" * arr * arr`, which evaluates to NaN.

If we use the suggested base case of `return 1`, then we get `1 * arr * arr`, which yields the expected result of `2`.

Does this make sense?

1 Like

you would need to separate the recursion base case, where you need the `1`, or `arr` as starting value, and the invalid input thing, otherwise you would find yourself with `"Wrong input" * 5` (or any other number) and that results in `NaN` when the recursion is using a function call with a lower `n` to calculate the current call

2 Likes

Thanks for the detailed explanation @nhcarrigan, @ieahleen, I will try writing different base case!

1 Like