Позвольте мне посмотреть, могу ли я пролить свет на эту тему.
Когда вы думаете об рекурсии, это помогает (по крайней мере, мне), думать о программе более декларативным образом, то есть вы думаете о том, что вы пытаетесь выполнить, вместо того, чтобы думать о каждом шаге алгоритма необходимых для его достижения.
Давайте проверим ваш пример, вам нужно найти максимальное значение в массиве, поэтому мы разложим эту проблему в меньших задачах.
Если размер массива равен 1, есть только один элемент ... так что один из них является максимальным. Легко.
Проблема нахождения max может быть описана как: большее значение между одним элементом списка и максимальным количеством всех остальных элементов.
Это то, что вы делаете в остальной части кода. Вы применяете алгоритм к массиву от позиции 0 до длины-1, а затем сравниваете возвращаемое значение.
Эти вызовы будут создавать рекурсии дерева, значение, будет несколько вызовов «вложенными», пока каждый вызов не будет сделано с длиной = 1 (базовый случай), и затем, алгоритм начнет реконструкцию ответ ,
Лучший способ понять рекурсивный алгоритм - захватить кусок бумаги и эмулировать программу, записать значения вашего массива и значение «длина» на бумаге для каждого вызова, а затем выяснить, что происходит после того, как каждый вызов наконец достигнет базового варианта.
Для {1,1,0,2}, вы в основном получаете цепочку вызовов, что-то вроде:
max(maxFind({1,1,0}), 2)
Где maxFind ({1,1,0}) сводится к:
max(maxFind({1,1}), 0)
и maxFind ({1,1}) является
max(1,1) = 1
Тогда это начинает кипеть до (это обратный порядок сверху):
max(1, 0) = 0
max(1, 2) = 2
Таким образом, результат будет 2.
почему отладчик не в состоянии помочь? – kostja
i י aving проблема с пониманием отладчика blueJ. Я попробую отладчик eclipse. – Oshrib
ОК, отладчик eclipse выполнил задание. как я забыл эту опцию ... – Oshrib