2015-06-14 4 views
2

Я читаю ML для рабочего программиста и немного смущен различием автора между итерационным и рекурсивным. Я понимаю, что «рекурсивный» просто ссылается на функцию, которая называет себя. Любая функция, которая не является рекурсивной, является итеративной (где итеративный алгоритм обычно включает некоторый цикл).Стандарт ML: Итеративный против рекурсивного

Однако в этой книге автор скажет что-то вроде «к счастью, очевидное рекурсивное решение является итеративным». Поэтому мое понимание этих терминов, безусловно, отличается от того, как автор использует их.

Может кто-нибудь уточнить, где я не понимаю эти термины?

Спасибо, bclayman

+3

В основном все методы, используемые в этой книге, являются рекурсивными, некоторые из них являются лишь хвостовыми рекурсивными - это то, что автор называет итеративным. –

ответ

2

Итерационный означает, что вы можете выразить это с петлей. Однако, вообще говоря, цикл является лишь частным случаем рекурсии. Например, в SML, петли

while A do B 

буквально определяется как синтаксический аббревиатура для рекурсивного определения

let fun loop() = if A then (B; loop()) else() in loop() end 

Вот почему «итеративный» не понимается как противоположность «рекурсивным», но как частный случай: некоторые рекурсивные определения являются итеративными, другие - нет. Более конкретно, это частный случай linear рекурсия, где рекурсивное определение вызывается не более одного раза.

+0

Спасибо за объяснение. Что может быть примером функции, которую вы можете написать рекурсивно, но не итеративно? – bclayman

+1

Что-то, что требует, по меньшей мере, двух рекурсивных вызовов, например. быстрой сортировки или аналогичных алгоритмов разделения и покоя. Обходы деревьев также. Но, строго говоря, каждая функция может быть записана итеративно, если вы хотите управлять собственной структурой данных стека, а не использовать стек вызовов. Разумеется, это более простой или более эффективный вопрос. Истинными итеративными функциями являются только те, которые используют постоянное пространство (исключая стек). –

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