gpt4 book ai didi

javascript - 使用带有 while 循环的递归的奇怪结果

转载 作者:行者123 更新时间:2023-12-04 05:39:35 27 4
gpt4 key购买 nike

我是 Javascript 的初学者。当我自己尝试递归时,我使用 while 循环得到了一些奇怪的结果。使用 If 语句得到正确的结果。

这是代码和结果:

var test = function f(n){
while(n > 0){
document.write(n);
f(--n);
}
};

test(5);

结果:

5432112113211211432112113211211



使用 If 语句时
var test = function f(n){
if(n > 0){
document.write(n);
f(--n);
}
};

test(5);

结果是:

54321



我真的无法在 while 中调试它案例。老实说,这让我在某些时候感到困惑。

最佳答案

需要注意的重要一点是,每次运行 f 里面的代码时,使用 创建一个新范围新品 变量名为 n .因此,通过递归调用 f ,您正在添加到作用域链。您不断添加到作用域链直到 n > 0false .一旦它为假,您就开始向上遍历作用域链,其中 其他 n 的版本存在。重复该过程直到所有 n所有作用域中的变量变为 0 .

请注意当我在下面的数字中添加一些空格时出现的模式。每次代码必须沿着作用域链向上时,我都会添加一个空格。每组数字代表沿着作用域链向下的代码。

54321 1 21 1 321 1 21 1 4321 1 21 1 321 1 21 1

Here is a jsfiddle that should be helpful.它打印两个数字:第一个数字代表您所在的范围,第二个数字与您在代码中打印的数字相同。查看第一个数字,并尝试了解如何为每个范围创建一个新数字。试着想想 n 的值是什么应该是当您稍后在程序中返回到该范围时。

关于javascript - 使用带有 while 循环的递归的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com