0
mergesort(int * arr, int low, int high){
if(low<high){
//mergesort();
//mergesort();
//merge();
}
}
再帰のために、以下の使用します高いと再帰は停止します。以前の呼び出しから作業を開始します。 しかしそれはそうしなかった! 理由は何ですか?
mergesort(int * arr, int low, int high){
if(low<high){
//mergesort();
//mergesort();
//merge();
}
}
再帰のために、以下の使用します高いと再帰は停止します。以前の呼び出しから作業を開始します。 しかしそれはそうしなかった! 理由は何ですか?
ブロックの最初の部分では、ブロックが低い場合にのみ機能します。したがって、チェックを書き直したい場合は、lowが等しいかそれ以上のときに関数が再帰呼び出しを停止するようにする必要があります。
このように確認してください。
if(low>=high){ //you have to check if low becomes greater or equal to high too!
return;
}
デバッガでプログラムを実行して、「low」と「high」の値を調べるのはなぜですか?あなたがそうするとき、答えはかなり速く明らかになるはずです。 – kaylum
再帰呼び出しの引数を表示します。 –