2016-07-28 6 views
0

JavaScriptで再帰的に記述しようとしています。私は前と同じ配列を取得しています(つまり、何も変わりません)。私の安定したパーティションアルゴリズムの欠陥はどこですか?

どこに欠陥がありますか?

function unstable_partition (arr, f) 
{ 
     if(arr.length <= 1) 
     return arr; 
    var n = arr.length - 1; 
    if(f(arr[0])) 
     return unstable_partition(arr.slice(0,n),f).concat([arr[0]]); 
    else if(!f(arr[n])) 
     return [arr[n]].concat(unstable_partition(arr.slice(0,n - 1),f)); 
    else 
     return [arr[0]].concat(unstable_partition(arr.slice(1,n - 1)),f).concat([arr[n]]); 
} 

var isEven = function(x) { return x % 2 == 0; } 
var myArray = [1,2,3,3,4,5]; 
alert(unstable_partition(myArray,isEven).join(",")); 
+0

それがために同じ配列を返しません。私。最後のリターンを間違ったものにしてしまいました。それは 'return [arr [0] 'ではありません。 ); '? – choz

答えて

1

スライス最後の要素が含まれていない、あなたがそれを呼び出すときに「-1」実行する必要はありません

修正されたコード: https://jsfiddle.net/n7g7yfju/

function unstable_partition (arr, f) 
{ 
     if(arr.length <= 1) 
     return arr; 
    var n = arr.length - 1; 
    if(f(arr[0])) 
     return unstable_partition(arr.slice(0,n),f).concat([arr[0]]); 
    else if(!f(arr[n])) 
     return [arr[n]].concat(unstable_partition(arr.slice(0,n),f)); 
    else 
     return [arr[0]].concat(unstable_partition(arr.slice(1,n),f)).concat([arr[n]]); 
} 

var isEven = function(x) { return x % 2 == 0; } 
var myArray = [1,2,3,3,4,5]; 
alert(unstable_partition(myArray,isEven).join(",")); 
+1

あなたはスライスを意味しますか? –

+0

Ops、ty @JaromandaX。一定。 – serhiyb

関連する問題