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

递归计算数字根函数返回undefined问题求助

递归计算数字根函数返回undefined问题求助

嘿,我一眼就瞅出问题所在啦!核心原因是你在递归调用的时候没返回递归函数的结果,导致外层函数接不到最终的返回值,最后默认返回了undefined。

咱们拆解下你的digitalRoot函数逻辑:当计算出的total大于等于10时,你调用了digitalRoot(total),但没把这个调用的结果return出去。这时候当前的digitalRoot函数执行完递归后,没有任何返回语句,就会默认返回undefined;而只有total < 10的那一层递归返回了正确数字,但上层函数没接住这个值,最终整个函数就返回undefined了。

只需要改一行代码,在递归调用前加上return就行:

let digits = [];

function extractDigits(n) {
  const digit = n % 10;
  digits.push(digit);
  if (n >= 10) extractDigits((n - digit) / 10);
}

function digitalRoot(n) {
  extractDigits(n);
  const total = digits.reduce((acc, cur) => acc + cur, 0);
  digits = [];

  if (total < 10) {
    console.log(total); // 正常输出5
    console.log(typeof total); // 正常输出number
    return total; 
  }
  // 关键:把递归调用的结果返回给上层函数
  return digitalRoot(total);
}

console.log(digitalRoot(473)); // 现在会输出5,不再是undefined

另外给你提个小优化建议:全局的digits数组容易产生副作用(比如多次调用函数时可能出问题),可以把它放到函数内部,改成无副作用的写法:

function extractDigits(n) {
  const digits = [];
  // 用内部helper函数递归收集数字
  function helper(num) {
    const digit = num % 10;
    digits.push(digit);
    if (num >= 10) helper((num - digit) / 10);
  }
  helper(n);
  return digits;
}

function digitalRoot(n) {
  const digits = extractDigits(n);
  const total = digits.reduce((acc, cur) => acc + cur, 0);

  if (total < 10) {
    return total;
  }
  return digitalRoot(total);
}

console.log(digitalRoot(473)); // 输出5

备注:内容来源于stack exchange,提问作者turanarican

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:24:36