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]就像一个变量,所以每次你加上之前的值,在计数中,你都要计算列表的长度。