1
這是合併排序方法:這個遞歸函數的答案是什麼?
private void doMergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middle = lowerIndex + (higherIndex - lowerIndex)/2;
System.out.println("Lower index="+lowerIndex+" Middle="+middle+ " Higher index="+higherIndex);
doMergeSort(lowerIndex, middle);
doMergeSort(middle + 1, higherIndex);
mergeParts(lowerIndex, middle, higherIndex);//never mind this method
}
}
爲doMergeSort輸出(0,9)作爲如下:
Lower index=0 Middle=4 Higher index=9
Lower index=0 Middle=2 Higher index=4
Lower index=0 Middle=1 Higher index=2
Lower index=0 Middle=0 Higher index=1
Lower index=3 Middle=3 Higher index=4//This line
Lower index=5 Middle=7 Higher index=9
Lower index=5 Middle=6 Higher index=7
Lower index=5 Middle=5 Higher index=6
Lower index=8 Middle=8 Higher index=9
4 11 23 28 43 45 65 77 89 98 //never mind this part too
怎麼沒輸出的4號線(如標註與評論)成立?請解釋。
這是一個從''doMergeSort由第二遞歸調用(0,4)'':中間的計算公式爲2,那麼您撥打電話(0,2)和(3,4)。爲什麼你有這個問題? – jasonharper
您是否有問題單步執行代碼?如果您在println處放置了一個斷點,則可以在打印該特定行時看到遞歸的調用堆棧。 –
@jasonharper那麼這是否意味着函數doMergeSort(0,4)和doMergeSort(3,4)同時執行? –