Это метод для слияния-рода:Каков ответ на эту рекурсивную функцию?
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) выполняются одновременно? –