JavaScript编写数字根函数返回undefined的原因是什么?
问题原因
你的代码逻辑本身没有错误,问题出在递归调用的位置没有加return关键字。只有最内层满足n < 10条件的分支有返回值,但这个返回值没有被上层递归调用传递回来,最终最外层的函数调用没有返回值,所以得到undefined。
修复方案
只需要在递归调用digital_root(result)前加上return即可:
function digital_root(n) { if (n < 10){ console.log(n) return n } var turnToArray = n.toString().split('') var joinArray = turnToArray.join('+') result = eval(joinArray) return digital_root(result) } console.log(digital_root(120)) // 正确返回3
可选优化
你当前的实现用了eval,存在安全隐患且性能表现不好,可以改用数组求和的方式实现,也可以用数字根的数学公式进一步简化到O(1)时间复杂度:
// 数组求和版本 function digital_root(n) { if (n < 10) return n const sum = n.toString().split('').reduce((acc, cur) => acc + Number(cur), 0) return digital_root(sum) } // 数学公式版本 function digital_root(n) { return n ? (n % 9 || 9) : 0 }
内容的提问来源于stack exchange,提问作者kq05
相关产品推荐
相关产品推荐

