Tell us what’s happening:
Tell me please, what is wrong with my code
function countdown(myArray, n){
if (n == -1) {
return [];
} else if (n > 1) {
myArray = countdown(myArray, n-1);
myArray.unshift(n);
return myArray;
}
}
mistake - ReferenceError: Can’t find variable: myArray
Your code so far
//Only change code below this line
function countdown(myArray, n){
if (n == -1) {
return [];
} else if (n > 1) {
myArray = countdown(myArray, n-1);
myArray.unshift(n);
return myArray;
}
}
Your browser information:
User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15
.
Challenge: Use Recursion to Create a Countdown
Link to the challenge:
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-countdown
Step through an execution of your code - what happens when n == 1? What does it return? How does that return value affect the rest of the stack as your recursion unwinds?
This is the problem:
myArray = countdown(myArray, n-1);
You modified the parameter reference (myArray), which it’s not good at all. In fact, if you comment this line, you won’t get the error. If you want to do it in that way, declare a local variable. This happen because JS have call by sharing. It’s a good practice don’t reassign function parameter inside functions. If you do, the parameter doesn’t reference the original object anymore.
1 Like
Wrong @. It’s not my code!
edit: @ was fixed. I also don’t get the error referenced by the original poster, but the logic error I tried to lead them toward is still a problem.
The error shows in Chrome and Firefox. If you look at the console in Chrome you will see “TypeError: Cannot read property ‘unshift’ of undefined”. It’s not a browser or test error, @Anastasiya is modifying myArray reference inside the function, that the problem.
1 Like
Right, I didn’t realized that. My fault…
Thanks everyone!
I rewrote the function and it worked. Now it looks like this.
function countdown(myArray, n){
if (n <= 0) {
return;
} else {
myArray.push(n);
countdown(myArray, n - 1);
}
};
2 Likes