如何解决HackerRank superDigit挑战中JS代码返回undefined的问题
问题根因
你代码返回undefined的原因是递归分支没有显式返回结果:
JavaScript函数运行时如果没有执行到对应的return语句,默认返回值为undefined。你在else分支中只执行了递归调用superDigit(nMult.toString(),1),但没有将这个调用的计算结果返回给上层调用者,当代码触发递归逻辑时,外层函数最终没有返回值,就得到了undefined。
修复代码
仅需要在else分支的递归调用前添加return关键字即可:
function superDigit(n, k) { // Write your code here var nArr = []; for(let i = 0; i < n.length; i++) { nArr.push(n[i]); } console.log('nArr: ' + nArr); var nComb = 0; for(let i = 0; i < nArr.length; i++) { nComb += parseInt(nArr[i]); } console.log('nComb: ' + nComb); var nMult = nComb *= k; console.log('nMult: ' + nMult); console.log(''); if(nMult < 10) { return nMult; } else { return superDigit(nMult.toString(),1); } }
验证说明
以官方示例输入n = '9875', k = 4为例,计算逻辑为:
- 拆分n求和:9+8+7+5 = 29
- 乘以k得29*4=116
- 递归计算116的超级位:1+1+6=8
修复后的代码会正确返回8,不会出现undefined问题。
内容的提问来源于stack exchange,提问作者Theunis Lombard
相关产品推荐
相关产品推荐

