Я пытаюсь написать рекурсию, которая создаст массив обратного отсчета. Функция должна принимать массив в параметре myArray
и добавлять числа от n
до 1 на основе параметра n
. Например, вызов этой функции с помощью n = 5
заполнит массив цифрами [5, 4, 3, 2, 1]
внутри него. Ваша функция должна использовать рекурсию, вызывая себя, и не должна использовать циклы любого вида.
Кажется, есть несколько способов написания рекурсии, есть ли общепринятый и легко читаемый метод?
function countdown(myArray, n){
if (n>=1) {
myArray = countdown(myArray, n-1);
myArray.unshift(n);
}
return myArray;
}
function countdown(myArray, n){
if (n<=0) {
return;
} else {
myArray.push(n);
countdown(myArray,n-1);
}
}
Если я введу countdown(myArray, 5)
, обе функции вернут массив с именем myArray = [5,4,3,2,1]
.
У нижней функции типичный базовый случай ... а у верхней функции нет? Мне удобнее писать с использованием метода bottom, но я немного растерялся, почему он работает. Не будет вызывать нижнюю функцию до тех пор, пока она не достигнет countdown(myArray,0)
, затем вернется и начнет возвращаться в стек. Так не начнется ли он с myArray.push(1)
до того, как он вернется в стек, в результате ответ будет [1,2,3,4,5]
вместо [5,4,3,2,1]
?