Replace Loops using Recursion -- question about base case

Hi everyone,

I’m having a hard time understanding the base case in the JavaScript exercise “Replace Loops using Recursion” and any help would be greatly appreciated, thanks in advance.

Link to exercise: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/replace-loops-using-recursion

I was able to solve the exercise but don’t understand why in the base case we can’t have the following:

SPOILER ALERT

if (n = 0) {
// rest of code
}

I don’t understand why the base case condition has to be:

if (n <= 0) {
// rest of code
}

My understanding is that unless you pass in a negative number for “n” as the argument, “n” can never be less than 0.

I don’t want to post the whole answer here in case others haven’t done this exercise, but lets say you call this function:

sum([1], 0)

Here, “n” is 0, and since 0 is equal to 0 (our base case), it should return 0 and end the recursion. I don’t understand why it has to be ---- if n is less than or equal to 0.

I’d be most grateful for any help, thanks in advance.

in my solution I used (n == 0) and that worked just fine.
You would only really need to worry about negative numbers if there was a possibility that n would be negative (if the calling code passes you -1 for eg)

1 Like

Yeah you can get away with n === 0, but knowing that if someone enters a negative number that will make an infinite recursion it would be better to have it be n <= 0. Its not a bad idea to write code to try and head off possible bugs at the pass for reasonable mistakes that you can foresee.

2 Likes

Hey thanks for the response, appreciate it.

All this time I was writing (n = 0) instead of (n == 0) ------ facepalm. It just didn’t occur to me I was missing an equal sign. Thanks again!

oh i see. I missed that in your example.

Hey thanks for the response, appreciate it. You’re right, I think its definitely best practice to have (n <= 0).

Although I wasn’t really thinking about preventing possible bugs as I was approaching this like a standalone exercise, I think what you said is really useful, in that I should really try to anticipate possible problems from the start, like I would if I was working on a project. Thanks again.

1 Like