Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么递归示例中的一个有效,而另一个无效';T请解释其工作原理_Javascript_Recursion - Fatal编程技术网

Javascript 为什么递归示例中的一个有效,而另一个无效';T请解释其工作原理

Javascript 为什么递归示例中的一个有效,而另一个无效';T请解释其工作原理,javascript,recursion,Javascript,Recursion,//下面的函数起作用,上面的函数不起作用。为什么? function countup(n) { if (n > 0) { const countArray = countup(n - 1); countArray.push(n); return countArray; } } console.log(countup(10)); 函数倒计时(n){ if(n

//下面的函数起作用,上面的函数不起作用。为什么?

function countup(n) {
        if (n > 0) {
         const countArray = countup(n - 1);
          countArray.push(n);
          return countArray;
        }
  }
 console.log(countup(10));
函数倒计时(n){
if(n<1){
返回[];
}否则{
const countArray=countup(n-1);
countArray.push(n);
返回计数数组;
}
}
控制台日志(倒计时(10));

//唯一的区别似乎是n<1时创建的空数组[]。countArray如何成为数组//我遗漏了什么吗?

在工作函数中,当n达到0时,您将返回空数组。由于递归的顺序,这将返回,并且调用函数能够将推送到数组中

在非工作函数中,从未定义数组,因此不存在
.push

如果像这样修改第一个函数,它应该可以工作

function countup(n) {
 if (n < 1) {
    return [];
 } else {
    const countArray = countup(n - 1);
    countArray.push(n);
    return countArray;
  }
}
console.log(countup(10));

这样,如果n>0,它会调用自己,如果不是,当n达到0时,它会返回调用函数工作所需的空数组

原因如果
n
小于等于0,则隐式返回undefined,并且不能推送到undefined。在第二种情况下,您正确地返回了一个数组。您能解释一下您有什么证据表明“一个…工作,一个不工作”吗?我在chrome控制台和jsbin中运行了这些。com@ScottHunter,因为,如果他们都成功了,那么他就不会发布这个问题了?@Dabrowski:像斯科特·亨特那样要求澄清的目的是让OP更具体地描述期望。很有可能,在编写类似“因为第一个创建了一个数组,而第二个产生了错误
无法读取未定义的属性“push”
”的内容时,OP会认识到这个问题,并学到比被告知更多的东西。这也是我的想法,但当n<1为真时,它不应该仅仅返回空数组并退出函数。我不明白指针是如何返回到constrarray的。如果它在一开始就没有机会碰到它,请按(n)?我猜我不理解每行代码的正确执行顺序。countup(1)调用countup(0)countup(0)将空数组作为
countArray
返回给countup(1)。countup(1)使用
countArray.push
。。。。。。。countup(0)将空数组作为countArray返回给countup(1)。如果发生这种情况,那是真的。我想我就是不明白在这个递归场景中返回意味着什么return“表示将整个方法退出给我。谢谢。
return
会在此时退出整个函数,但会将值传递回调用函数。我已经更正了第一个返回空数组的函数,应该可以了。希望这能帮助你理解?如果可以的话,请标出答案。再次感谢。
function countup(n) {
  if (n > 0) {
    const countArray = countup(n - 1);
    countArray.push(n);
    return countArray;
  }

  return [];
}