JavaScript中的递归如何影响函数参数?(河内塔)
我需要有人帮我把事情说清楚JavaScript中的递归如何影响函数参数?(河内塔),javascript,recursion,Javascript,Recursion,我需要有人帮我把事情说清楚 function move(stack, from, to, via) { if (stack === 1) { console.log(`Move ${stack} from ${from} to ${to}`); } else { move(stack-1, from, via, to); console.log(`Move ${stack} from ${from} to ${to}`);
function move(stack, from, to, via) {
if (stack === 1) {
console.log(`Move ${stack} from ${from} to ${to}`);
} else {
move(stack-1, from, via, to);
console.log(`Move ${stack} from ${from} to ${to}`);
move(stack-1, via, to, from);
}
}
因此我知道第一个递归move()
在stack==1
之前被调用两次,第三个递归调用move()
满足if
语句,并进入第一个控制台.log
如果move(3,“A”,“C”,“B”)
第一个控制台日志将是“move 1 from A to C”
如果move(4,“A”,“C”,“B”)
第一个控制台日志将是“move 1 from A to B”
所以我不明白为什么会这样。奇数个递归如何改变参数?因为在这两种情况下,都不会将move()
使用via
作为其“目标”点?注意递归调用会交换参数。@Bergi这就是我想知道的。因为第二个递归调用是如何再次切换的。因为如果第一个递归调用切换到并通过around,那么如果调用同一个递归函数,为什么后续的每个调用都不保留这些参数?如果主函数调用是via=B和to=C,递归调用是via=C和to=B,那么如果我们仍然调用move(),via作为第三个参数,to作为第四个参数,它又是如何变成via=B和to=C的呢?每个递归调用都是独立的,并且有自己的变量。我们不是“还在打电话”,我们是在再次打电话。该调用从当前活动范围中获取变量值。也许能帮上忙?@Bergi哦,我现在明白了。我没有考虑活动范围。非常感谢您花时间解释!