此代码的目的是递归地对数字的数字求和。喜欢; 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));
对 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));