2016-08-11 4 views
0

我々はある私は、しかし、それに代わるものを使用
これは同等ですか? <br></p> <pre><code>mergesort(int * arr, int low, int high){ if(low==high){ return; } //mergesort(); //mergesort(); //merge(); } </code></pre> <p>は、私はいつでも低等しくなると信じて:<code>merge sort</code>と<code>quicksort</code>の主な機能で

mergesort(int * arr, int low, int high){ 

if(low<high){ 
     //mergesort(); 
     //mergesort(); 
     //merge(); 
    } 
} 

再帰のために、以下の使用します高いと再帰は停止します。以前の呼び出しから作業を開始します。 しかしそれはそうしなかった! 理由は何ですか?

+1

デバッガでプログラムを実行して、「low」と「high」の値を調べるのはなぜですか?あなたがそうするとき、答えはかなり速く明らかになるはずです。 – kaylum

+0

再帰呼び出しの引数を表示します。 –

答えて

1

ブロックの最初の部分では、ブロックが低い場合にのみ機能します。したがって、チェックを書き直したい場合は、lowが等しいかそれ以上のときに関数が再帰呼び出しを停止するようにする必要があります。

このように確認してください。

if(low>=high){ //you have to check if low becomes greater or equal to high too! 
    return; 
} 
関連する問題