#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 , (я..