2015-09-22 7 views
0

Выполняют ли все алгоритмы, использующие подход «разделение и захват», рекурсивные функции или необязательно?Все методы разделения и завоевания используют рекурсивные функции или не обязательно?

+4

Любая рекурсивная функция также может быть записана не рекурсивно, просто поместив необходимые переменные в 'Stack'. Стратегия разделения и завоевания * позволяет * использовать рекурсивный шаблон, поскольку он очень естественным образом подходит для стратегии. Это не значит, что он должен использовать рекурсию. Heck даже вики охватывает, как стеки используются в делении и побеждать inlue рекурсии. https://en.wikipedia.org/wiki/Divide_and_conquer_algorithms –

+0

Рекурсия также внутренне использует только стек – saurav

+0

Подход с разделением и завоеванием не всегда действительно рекурсивный. Рекурсия может закончиться на первом уровне, если результирующие части могут быть решены сразу без дальнейшего разделения. –

ответ

0

Двоичный поиск - это применение парадигмы D &. (Как показано ниже: разделение на две половины и продолжение в половине, которая может содержать ключ.)

Он может быть реализован как рекурсивно, так и не рекурсивно.

Рекурсия удобна, когда вам нужно сохранить обе «половинки» разделения и поставить их в очередь для последующей обработки. Обычная ситуация называется хвостовой рекурсией, когда вы только ставите одну из половинок и обрабатываете другую немедленно. В двоичном поиске вы просто бросаете одну из половинок.


В самом широком смысле, D & C является отцом всех алгоритмов при заявленных как «разбить задачу на подзадачи проще одного и того же рода». Это определение также охватывает итеративные решения, часто реализуемые без рекурсии.

+0

(Альтернативная формулировка будет: _Break вниз проблема в более легкие или более мелкие проблемы и объединить результаты под-проблем (и, возможно, некоторые из «границы между под-проблемами») _). Все результаты суб-задачи пустые, но один - особый случай.) – greybeard

+0

@greybeard: Я бы предпочел перейти к еще более короткому утверждению, например, «разбить проблему на более простые подзадачи», даже если она снижает специфику (сбалансированный) split/solve/merge process. Вопрос личного вкуса. –

 Смежные вопросы

  • Нет связанных вопросов^_^