为何计算数字根的函数返回undefined?变量已存正确结果
问题分析与解决
你的问题出在递归调用时没有返回结果。
看代码里的这个分支:
if (s >= 10) { nuberRoot(s) }
当s >=10时,你确实递归调用了nuberRoot(s)去计算新的数字根,但没有把这个递归调用的返回值传递出去。当前函数执行完这个分支后,没有任何return语句,所以会默认返回undefined,这就是外层调用得到undefined的原因。
修正方法很简单,在递归调用前加上return,把递归的结果返回:
function nuberRoot(a: number): number { let s: number = 0; while (a > 0) { s += a % 10 a = Math.floor(a / 10) } if (s >= 10) { return nuberRoot(s) // 这里加上return } else { alert(s) return s } } alert(nuberRoot(942)) // 现在会正确返回6
这样,当递归计算出最终的数字根后,会一层层把结果返回给上层调用,最终外层就能得到正确的结果了。
内容的提问来源于stack exchange,提问作者Андрей Воробьёв
相关产品推荐
相关产品推荐

