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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:54:05