«Используйте рекурсию для создания обратного отсчета freeCodeCamp»

#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 , результат всегда гарантированно будет массивом.