Выполняют ли все алгоритмы, использующие подход «разделение и захват», рекурсивные функции или необязательно?Все методы разделения и завоевания используют рекурсивные функции или не обязательно?
ответ
Двоичный поиск - это применение парадигмы D &. (Как показано ниже: разделение на две половины и продолжение в половине, которая может содержать ключ.)
Он может быть реализован как рекурсивно, так и не рекурсивно.
Рекурсия удобна, когда вам нужно сохранить обе «половинки» разделения и поставить их в очередь для последующей обработки. Обычная ситуация называется хвостовой рекурсией, когда вы только ставите одну из половинок и обрабатываете другую немедленно. В двоичном поиске вы просто бросаете одну из половинок.
В самом широком смысле, D & C является отцом всех алгоритмов при заявленных как «разбить задачу на подзадачи проще одного и того же рода». Это определение также охватывает итеративные решения, часто реализуемые без рекурсии.
(Альтернативная формулировка будет: _Break вниз проблема в более легкие или более мелкие проблемы и объединить результаты под-проблем (и, возможно, некоторые из «границы между под-проблемами») _). Все результаты суб-задачи пустые, но один - особый случай.) – greybeard
@greybeard: Я бы предпочел перейти к еще более короткому утверждению, например, «разбить проблему на более простые подзадачи», даже если она снижает специфику (сбалансированный) split/solve/merge process. Вопрос личного вкуса. –
Любая рекурсивная функция также может быть записана не рекурсивно, просто поместив необходимые переменные в 'Stack'. Стратегия разделения и завоевания * позволяет * использовать рекурсивный шаблон, поскольку он очень естественным образом подходит для стратегии. Это не значит, что он должен использовать рекурсию. Heck даже вики охватывает, как стеки используются в делении и побеждать inlue рекурсии. https://en.wikipedia.org/wiki/Divide_and_conquer_algorithms –
Рекурсия также внутренне использует только стек – saurav
Подход с разделением и завоеванием не всегда действительно рекурсивный. Рекурсия может закончиться на первом уровне, если результирующие части могут быть решены сразу без дальнейшего разделения. –