Итак, я изучаю сортировку слиянием (в Ruby), и я в основном понимаю, как она работает, поэтому я просто пишу начало функциональности «mergeSort» и разбиваю массивы:
array = [5,1,8,3,4,6,11,2]
def mergeSort(arr,beginIndex,endIndex)
if endIndex > beginIndex
mid = (beginIndex+endIndex)/2
puts mid
puts "#{arr[0..mid]}"
puts "#{arr[mid+1..-1]}"
mergeSort(arr,0,mid) #comment out here?
mergeSort(arr,mid+1,arr.length-1) #or here?
end
end
mergeSort(array,0,array.length-1)
Так что я понимаю, что происходит, и что распечатка работает правильно. Однако странная вещь ... если я закомментирую один из вторичных вложенных mergeSort
(где я говорю "#comment здесь? Или здесь?), Я получу распечатку, как я думаю. Однако если я уйду и то и другое будет продолжаться вечно, пока я не получу «слишком большой уровень стека». Это странно, потому что закомментировав любой из них, он остановится, когда массив будет иметь длину 1
.
Почему это происходит?