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

为何递归函数中console.log输出正确值,return却返回undefined?

问题原因分析

你遇到的问题核心是递归调用时没有返回结果:

当createCheckDigit("55555")执行时,进入else分支,计算出sum为25,接着调用createCheckDigit("25");这个调用又进入else分支,计算sum为7,再调用createCheckDigit("7")——此时触发基准条件,console.log输出7并返回"7"。但前两次递归调用(createCheckDigit("25")和createCheckDigit("55555"))的else分支里,只是执行了递归函数,却没有把递归的返回值传递回去,所以这两层函数执行完后默认返回undefined,最终外层的console.log就输出了undefined。

修复后的代码

只需要在else分支的递归调用前加上return,让每一层递归都把结果向上传递:

function createCheckDigit(membershipId) {
  let checkDigit = membershipId;
  if ([...checkDigit].length === 1) {
    console.log(checkDigit);
    return checkDigit;
  } else {
    let mIdList = [...checkDigit];
    let sum = 0; // 加上let避免全局变量污染
    for (let c in mIdList) {
      sum += Number(mIdList[c]);
    }
    return createCheckDigit(sum.toString()); // 新增return传递递归结果
  };
}

console.log(createCheckDigit("55555")); // 现在会输出7

额外提个小细节:原代码里的sum没有用let声明,会变成全局变量,可能引发意外问题,建议补上声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:57:09