Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 为什么递归在这两个例子中表现不同?_Javascript_Algorithm_Recursion - Fatal编程技术网

Javascript 为什么递归在这两个例子中表现不同?

Javascript 为什么递归在这两个例子中表现不同?,javascript,algorithm,recursion,Javascript,Algorithm,Recursion,我有两个递归示例,一个计算数组中所有元素的和,第二个返回计数,两个示例的行为不同,我无法联系起来 第一个例子: const sum=(列表)=>{ 如果(list.length==0){ 返回0; } 返回列表[0]+和(list.slice(1)); }; log(总和([1,2,3,4]);//10查看返回1+计数(list.slice(1))在计数函数中。它将忽略递归传递给函数的列表中的第一个元素,并始终使用1。与求和函数一起考虑元素。有效地返回函数被调用的次数,即6次第一和,第二次计数

我有两个递归示例,一个计算数组中所有元素的和,第二个返回计数,两个示例的行为不同,我无法联系起来

第一个例子:

const sum=(列表)=>{
如果(list.length==0){
返回0;
}
返回列表[0]+和(list.slice(1));
};

log(总和([1,2,3,4]);//10查看
返回1+计数(list.slice(1))
在计数函数中。它将忽略递归传递给函数的列表中的第一个元素,并始终使用1。与求和函数一起考虑元素。有效地返回函数被调用的次数,即6次第一和,第二次计数,
如果您希望他们做同样的事情,您应该只使用其中一个。

递归是相同的

它访问数组的所有元素,如果没有可用的元素,则返回零


对于每个元素,它要么返回求和项,要么返回计数项。

sum vs count…?一个对数组值求和,另一个对数组值进行计数。我不知道您为什么期望这两个元素相同。在第一个示例中,
list[0]
被添加到列表中所有其他元素的总和中。在第二个示例中,将
1
添加到列表其余部分的计数中
list[0]
获取传入函数的数组中的第一个元素,并将其与进一步调用
sum
的返回值相加。第一个元素执行
list[N-1]+list[N-2]+…+列出[N-N]+0(N是元素的数量),而第二个则是
1+1+…+1+0
要澄清一些事情,可以说你有一个数字列表。当我要求你们求和时,它意味着把所有的值相加,然后把总值还给我。当我要求你数数数字时,我对数字的含义不感兴趣,我只是想知道有多少个数字。我的意思是你做了两件不同的事情,list[index]就像一个变量,所以每次你加上之前的值,在计数中,你都要计算列表的长度。