javascript - 为什么递归在这两个例子中表现不同?
问题描述
我有两个递归示例,一个计算数组所有元素的总和,第二个返回计数,两个示例的行为不同,我无法关联!
第一个例子:
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!
解决方案
return 1 + count(list.slice(1));
在计数功能中查看。它只会忽略您递归传递给函数的列表中的第一个元素,并始终使用 1。而 sum 函数确实考虑了该元素。这有效地返回了函数被调用的次数,即 6
推荐阅读
- javascript - 即使模型值为真,材料复选框也未选中
- javascript - 验证并在页面上显示所有错误并在条件满足时删除错误
- python - 如何遍历两个并行的字典值列表?
- redis - Redis 服务正在运行,但一段时间后停止写入日志并且密钥消失
- excel - 如何使用 VBA 存储公式但只粘贴值
- sql - 在 bigquery cli 中运行参数化查询时如何使用 TIMESTAMP 和 DATETIME 函数?
- express - 如何使用 google vision api 从银行支票中准确提取微码?
- python - 如何将 Keras .h5 模型转换为暗网 yolo.weights 格式?
- wordpress - 如何禁用核心块的工具栏?这可能吗?
- jsf - Primefaces SelectOneMenu 的 ajax 事件在 outputPanel 内渲染,不工作