#javascript #function #recursion
#javascript #функция #рекурсия
Вопрос:
почему они назначают функцию переменной countArray :
function countup(n) {
if (n < 1) {
return [];
} else {
var countArray = countup(n - 1); // here
countArray.push(n);
return countArray;
}
}
Комментарии:
1. Они присваивают не функцию, а возвращаемое значение (которое является массивом).
2. Стек вызовов
n - 1
разматывается, и результаты помещаются в countArray, вот ссылка — icarus.cs.weber.edu /~dab/cs1410/учебник/6.Функции/…3. почему он возвращает массив, это из-за
.push()
или из-за базового варианта ?
Ответ №1:
Это рекурсивная функция
Это особый вид функции, который определяется в терминах самого себя. В простейшем случае он дает прямой постоянный ответ, в данном случае `[]`. Но для более сложных случаев он что-то делает, а затем вызывает себя, чтобы сделать немного более простую вещь. Этот самозваный вызов продолжается до тех пор, пока оставшаяся задача не сведется к нулю.
Распространенным примером этой функции является функция factorial .
Факториал (n) определяется для натуральных чисел n
как:
If n is 1, the answer is 1,
otherwise the answer is n * Factorial(n-1)
В вашем случае вы возвращаете не числа, а массивы
Почему это массив, из-за обеих вещей, которые вы описали!
Базовый вариант (n = 0) создает и возвращает пустой массив, []
. Любой вызов с более высоким n выполняет следующее:
Get the array for a one-lower value of n.
Push one more value onto the array
Поскольку единственным базовым значением является [] , и единственный способ его изменения по мере продвижения по цепочке — by .push
, результат всегда гарантированно будет массивом.