【问题标题】:Any reason why this is returning 'undefined'? [duplicate]为什么这会返回“未定义”? [复制]
【发布时间】:2016-09-24 22:51:06
【问题描述】:

我在 LeetCode 上遇到问题,由于某种原因,我的函数一直返回未定义。我基本上只是运行一个递归函数,然后跟踪结果,并最终在变量 endRes 中的 main 函数中返回它们。

/**
 * @param {number[]} nums
 * @return {string}
 */

function recursion(arr, str) {
    var result = str; 
    if (arr.length <= 1) {
        result+=arr[0];
        return result;
    }
    arr.sort(function(a, b){return b-a});
    var n = arr[0];
    var power = Math.floor(Math.log(n)/Math.LN10);
    for (var i=1; i<arr.length; i++) {
        var index;
        if (arr[i]>(arr[0]/(Math.pow(10, power))) && Math.floor(Math.log(arr[i])/Math.LN10) < power) {
            result+=arr[i].toString();
            arr.splice(i,1);
            recursion(arr, result);
        }
        if (i==arr.length-1){
            result+=arr[0].toString();
            arr.splice(0,1);
            recursion(arr, result);
        }
    }
}

var largestNumber = function(nums) {
    endRes = recursion(nums, "");
    return endRes;
};

【问题讨论】:

  • 您没有返回递归函数。即recursion(arr, result); 应该是return recursion(arr, result);
  • 当萌!就是这样。我能问你为什么不能只调用函数吗?为什么你需要那里的回报? (对不起,我是新人)。
  • Javascript 没有像 ruby​​ 那样的隐式返回。您必须明确声明它们。

标签: javascript


【解决方案1】:

在您的 recursion() 函数内部,您没有返回递归调用。

for (var i=1; i<arr.length; i++) {
    var index;
    if (arr[i]>(arr[0]/(Math.pow(10, power))) && Math.floor(Math.log(arr[i])/Math.LN10) < power) {
        result+=arr[i].toString();
        arr.splice(i,1);
        return recursion(arr, result); // add return here
    }
    if (i==arr.length-1){
        result+=arr[0].toString();
        arr.splice(0,1);
        return recursion(arr, result); // add return here
    }
}

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2011-05-07
    • 2018-07-11
    • 2021-01-14
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多