Объясните эту рекурсию JavaScript

#javascript #arrays #recursion

Вопрос:

Объясните эту рекурсию JavaScript, что именно происходит, когда выражение 0<0 выполняет оценку для foo(3)?
функция-foo возвращает console.log(«тест»)
. Является ли то, что console. log (), переданное в инструкции return, необычным?
Является ли это тем, что массив имеет два 0 для индексов 3 и 4, потому что foo дважды оценивает 0, потому что, как только i-1 достигает 1-1, рекурсивный вызов должен быть foo(0) да?
Но продолжает, но утешает.журнал вызывается дважды, когда вызов рекурсии foo() перемещается между ними. Какая разница, что здесь делает порядок?
Я не понимаю, почему именно эти результаты

 let ar = [];

function foo(i) {
  if (i < 0)
    return console.log("test");

  ar.push(i);
  console.log(i, Boolean(i<0));
  foo(i - 1);
  ar.push(i);
  console.log(i, Boolean(i<0));
}

foo(3)
console.log('ar=', JSON.stringify( ar ))  
 .as-console-wrapper { max-height: 100% !important; top: 0 } 

Ответ №1:

ваш рекурсивный код для foo(3) выполнения:

 function foo(i) {
  if (i < 0) return   // stop recursive call
  ar.push(i)          // first push
  foo(i - 1)          // recursive call
  ar.push(i)          // second push
}
 
 ar.push(3)                // ar = [3]         ==== firsts push
    ar.push(2)            // ar = [3,2]
        ar.push(1)        // ar = [3,2,1]
            ar.push(0)    // ar = [3,2,1,0]
                return    // i == -1 , (i<0) is true => no pushS, no foo(i - 1)
            ar.push(0)    // ar = [3,2,1,0,0]  === seconds push
        ar.push(1)        // ar = [3,2,1,0,0,1]
    ar.push(2)            // ar = [3,2,1,0,0,1,2]
ar.push(3)                // ar = [3,2,1,0,0,1,2,3]
 

Комментарии:

1. В какой-то момент i<0 должен принять значение true, чтобы foo(3) вернулся в if-оператор, поэтому, если Boolean(0<0) значение равно false , то когда foo(3) принимает значение true для возврата? Разве не только отрицательные числа делают это истинным, т. е. Boolean(-1<0) оценки true ?

2. Добавлено Boolean(i<0) для проверки случаев, когда я

3. @Джей , когда я = -1 , (я..