递归计算数字根函数返回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
相关产品推荐
相关产品推荐

