虽然变量的类型是正确的数字,但函数始终返回未定义的[重复]

问题描述 投票:0回答:1

此代码的目的是递归地对数字的数字求和。喜欢; 473 -> 4+7+3 = 14 -> 1+4 = 5 到此为止。所有函数似乎都工作正常,除了在最后一个函数中有一个 if 检查来检查数字是否低于 10。在函数内部,它控制台输出数字及其类型,如注释所示正确,但 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); // this works without problem ---> 5
    console.log(typeof total); // this also works --- > number
    return total; // but returns undefined
  }
  digitalRoot(total);
}

console.log(digitalRoot(473));

javascript recursion return undefined
1个回答
0
投票

对 digitalRoot(n) 的初始调用没有返回值,默认为未定义。

要解决此问题,您应该显式返回递归调用的结果:

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); // this works without problem ---> 5
    console.log(typeof total); // this also works --- > number
    return total; // but returns undefined
  }
  return digitalRoot(total);
}

console.log(digitalRoot(473));

© www.soinside.com 2019 - 2024. All rights reserved.