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)同时执行? –