首页 > 解决方案 > 为什么递归在这两个例子中表现不同?

问题描述

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

第一个例子:

const sum = (list) => {
  if (list.length === 0) {
    return 0;
  }
  return list[0] + sum(list.slice(1));
};

console.log(sum([1, 2, 3, 4])); // 10

第二:

const count = (list) => {
  if (list.length === 0) {
    return 0;
  }
  return 1 + count(list.slice(1));
};

console.log(count([0, 1, 2, 3, 4, 5])); // 6

为什么第一次递归遍历所有数组元素添加每个元素,而另一个向每个元素添加 1 然后只返回最终值?我认为它会做同样的事情,不同之处只是在总和上加 1!

标签: javascriptalgorithmrecursion

解决方案


return 1 + count(list.slice(1));在计数功能中查看。它只会忽略您递归传递给函数的列表中的第一个元素,并始终使用 1。而 sum 函数确实考虑了该元素。这有效地返回了函数被调用的次数,即 6


推荐阅读