使用console.log可以打印出来结果,但是return出去就是undefined

予怀
  • 13

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

leetcode的各位相加问题,我的思路是将数字分割然后相加,递归,小于10的数字return出去

相关代码

        var addDigits = function(num) {
            let str = num+=''
            let len = str.split('').length;
            let numTemp = 0
            if(num < 10) {
                console.log(num)//2
                return num
                
            } else {
                for (let i =0; i<len;i++) {
                    numTemp += parseInt(str.split('')[i], 10)
                }    
                addDigits(numTemp)
                
            }
            
        };
        
    console.log(addDigits(38)//undefined

你期待的结果是什么?实际看到的错误信息又是什么?

正确答案应为2,实际上返回出来的是undefined,但是打印出来的也是2

回复
阅读 3.1k
4 个回答
✓ 已被采纳

递归调用结果没有返回,肯定为undefined;修改为下面的:

var addDigits = function (num) {
    let str = num += '';
    let len = str.split('').length;
    let numTemp = 0;
    if (num < 10) return num;
    for (let i = 0; i < len; i++) {
        numTemp += parseInt(str.split('')[i], 10);
    }
    return addDigits(numTemp);
};

如果是递归 addDigits 前面少了个 return

如果 num<10能得到正确结果, 大于10则进入递归, return num 只是结束递归条件返回~ 最后函数没有返回值

你的递归方式写错了,执行一次就返回值了,你console的那个已经不是同一个函数的了

var addDigits = function(num) {
            let str = num+=''
            let len = str.split('').length;
            let numTemp = 0
            for (let i =0; i<len;i++) {
                    numTemp += parseInt(str.split('')[i], 10)
            }    
            numTemp>=10&&(numTemp=addDigits(numTemp))
            return numTemp
        };
宣传栏