You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python与JS递归函数的差异及JS递归求和代码错误排查

JS递归求和错误分析与Python/JS实现差异

你的JS代码错误点

  1. 递归传参完全错误:sum函数定义需要两个参数(数组ars和索引i),但递归调用时写的是sum(ars[1])——ars[1]取的是数组的第二个元素(第一次调用时是5),不是剩余元素组成的子数组;同时未传入第二个参数i,此时i为undefined。
  2. 终止条件逻辑失效:当ars是数字(比如5)时,ars.length为undefined,和undefined的i比较会返回true,直接返回0。因此第一次调用sum(arr, 0)会计算6 + sum(5),而sum(5)返回0,最终结果就是6。

Python与JS的递归实现差异

  • Python版本核心逻辑:基于数组切片实现递归。array[1:]会返回一个新数组,包含原数组从第二个元素到末尾的所有元素;终止条件判断数组是否为空,为空则返回0。每次递归处理的都是更短的子数组,逻辑直接贴合“拆分问题”的递归思路。
  • 你的JS函数初始设计:打算用索引遍历的方式(通过i标记当前遍历位置),但递归时偏离了这个设计——既没传递正确的索引值,也没正确生成子数组(JS中要实现类似Python的切片效果,需用ars.slice(1),而非ars[1])。

修正后的JS代码

方式1:模仿Python的切片逻辑

let arr = [6, 5, 3, 1, 1, 1, 1];

function sum(array) {
  if (array.length === 0) {
    return 0;
  }
  return array[0] + sum(array.slice(1));
}
console.log(sum(arr)); // 输出18

方式2:沿用索引遍历的初始设计

let arr = [6, 5, 3, 1, 1, 1, 1];

function sum(ars, i) {
  if (ars.length === i) {
    return 0;
  }
  return ars[i] + sum(ars, i + 1);
}
console.log(sum(arr, 0)); // 输出18

内容的提问来源于stack exchange,提问作者elRa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:42:49