2016-05-26 9 views
0

私はLeetCodeで問題を抱えています。何らかの理由で私の関数は未定義のまま返しています。私は基本的には再帰関数を実行してから、結果を追跡し、最終的に変数endResのmain関数のhighestNumberに戻します。これが「未定義」を返す理由は何ですか?

/** 
* @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; 
}; 
+9

再帰関数は返されません。 'recursion(arr、result);'は 'recursion(arr、result);になるはずです – shamsup

+0

ダングブラ!それはそれだった。なぜあなたは単に関数を呼び出すことができないのですか?なぜあなたはそこに戻る必要がありますか? (私は新しいです申し訳ありません)。 – vercingortix

+1

Javascriptにはrubyのような暗黙のリターンはありません。それらを明示的に宣言しなければなりません。 – shamsup

答えて

0

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 
    } 
} 
関連する問題