【问题标题】:Recursive function in Javascript returns undefinedJavascript中的递归函数返回未定义
【发布时间】:2017-01-21 16:46:21
【问题描述】:

我想创建一个接收数字的函数,该数字将减少到其数字的总和(16 减少到 7 -> 返回 7)直到结果只有一位长(326 减少到 11然后减少到 2 -> 返回 2)。

我正在创建一个递归函数,如下所示,但它对于长度大于 1 的数字返回未定义。

function digital_root(n) {
   var numStr = (typeof n == "string") ? n : n.toString(); // ensure we will use a string
   //console.log("evaluating " + numStr + "its length is " + numStr.length);
   //now evaluate my base case
   if (numStr.length <= 1){
     console.log("i will return" + numStr)//should return my 1 digit number
     return n; //it doesn't
   }
   else{
     var arr = numStr.split(""); //convert the string into an array
     var reducedArr = arr.reduce(function(a,b){
       return parseInt(a) + parseInt(b);//sum the elements of the array
     });
     digital_root(reducedArr);//send the reduced value back for evaluation
  }
}
digital_root(16)//returns undefined

我见过一些类似的questions,但它们只针对代码而不是概念。我学习递归的方式是你有一个你评估的基本情况,如果它是真的然后返回 - 这将是递归的结束 - 如果不是,继续运行代码来转换将是的数据再次送去评估。

如何避免未定义的结果,我的递归概念是否准确?

【问题讨论】:

  • return digital_root(reducedArr)

标签: javascript recursion


【解决方案1】:
return digital_root(reducedArr);

您在else 分支中缺少return。不执行 returnfunction 将产生 undefined

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多