JavaScript 问题中的递归 - console.log 的位置如何影响返回值的顺序?
Recursion in JavaScript question- how is the position of console.log here affecting the order in which values are returned?
我是编程新手,也是第一次学习基本递归。我刚刚在 JavaScript 中练习题的结果真的让我很吃力
面条。
function countDownRecursive(n) {
if (n == 0) {
console.log('Hooray!')
return
} else {
console.log(n)
countDownRecursive(n-1)
console.log(n)
}
}
即 countDownRecursive(3) 的输出是
3 2 1 Hooray! 1 2 3
我的问题是为什么像这样在 countDownRecursive(n-1) 之后放置 console.log() 会导致 JS 反向记录值?
在初始调用中,输入 else
,并且
console.log(n)
countDownRecursive(n-1)
3 已记录。然后,初始 countDownRecursive(3)
函数在调用 countDownRecursive(3-1)
时被挂起。堆栈现在由 countDownRecursive(3)
.
组成
同样的事情发生在 countDownRecursive(2)
。 2 被记录,并且通过 its 递归调用,堆栈现在由 countDownRecursive(2)
和 countDownRecursive(3)
.
组成
等等。最后,countDownRecursive(0)
,堆栈是
countDownRecursive(0) <-- current function
countDownRecursive(1)
countDownRecursive(2)
countDownRecursive(3)
和 3 2 1
已被记录。
在 0 时,不再有递归,所以有 Hooray
。最里面的 countDownRecursive(0)
结束,然后 countDownRecursive(1)
在递归调用点恢复:
countDownRecursive(1-1) // this line just finished
console.log(1)
所以 1 被记录,该函数结束。
函数不断恢复、记录和退出,直到堆栈为空,您剩下的日志为
3
2
1
Hooray!
1
2
3
我是编程新手,也是第一次学习基本递归。我刚刚在 JavaScript 中练习题的结果真的让我很吃力 面条。
function countDownRecursive(n) {
if (n == 0) {
console.log('Hooray!')
return
} else {
console.log(n)
countDownRecursive(n-1)
console.log(n)
}
}
即 countDownRecursive(3) 的输出是
3 2 1 Hooray! 1 2 3
我的问题是为什么像这样在 countDownRecursive(n-1) 之后放置 console.log() 会导致 JS 反向记录值?
在初始调用中,输入 else
,并且
console.log(n)
countDownRecursive(n-1)
3 已记录。然后,初始 countDownRecursive(3)
函数在调用 countDownRecursive(3-1)
时被挂起。堆栈现在由 countDownRecursive(3)
.
同样的事情发生在 countDownRecursive(2)
。 2 被记录,并且通过 its 递归调用,堆栈现在由 countDownRecursive(2)
和 countDownRecursive(3)
.
等等。最后,countDownRecursive(0)
,堆栈是
countDownRecursive(0) <-- current function
countDownRecursive(1)
countDownRecursive(2)
countDownRecursive(3)
和 3 2 1
已被记录。
在 0 时,不再有递归,所以有 Hooray
。最里面的 countDownRecursive(0)
结束,然后 countDownRecursive(1)
在递归调用点恢复:
countDownRecursive(1-1) // this line just finished
console.log(1)
所以 1 被记录,该函数结束。
函数不断恢复、记录和退出,直到堆栈为空,您剩下的日志为
3
2
1
Hooray!
1
2
3