Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Корекурсия?


Автор: macos 5.4.2011, 18:10
Привет!

Нашел недавно в Вики инфо про корекурсию, ко-данные и тд, стало интересно.

Не врубаюсь, что такое корекурсия совсем... Пишут, что дуальное понятие к рекурсии , в Вики неясно полностью.

Гуглил, писали, что это некий вид оптимизированный рекурсии, где нет древа повторных вычислений.... А другие сайты просто украли инфу с Вики... и как бы не знаю, где найти норм инфу...

Прошу помочь!

Заранее спасибо!

Автор: baldina 5.4.2011, 18:49
рекурсия:
Код

factorial(n) := if (n==0) 1 else n * factorial(n-1)
val f = factorial(5) //  factorial от аргумента 5

мы определили факториал числа n

корекурсия:
Код

factorial := 1 :: factorial.head * (factorial.head+1) :: factorial.tail.tail
val f = factorial(5) // 5й элемент списка

мы определили факториал как бесконечный список (здесь :: - операция конкатенации списков, head и tail соответственно первый элемент и хвост cписка, т.е. список list это то же что и list.head :: list.tail)

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

дуальность заключается в том, что рекурсия и корекурсия (так же как данные и коданные) суть одно и то же, только по-разному  smile 
рекурсия обрабатывает конечные структуры (и требует признака останова типа n==0)
корекурсии нужно начальное значение, а признак останова не нужен, т.к. вычисляется сколько требуется

в значительной степени поддерживается функциональными языками (они обычно содержат ленивые вычисления),
но и в императиве может быть смоделировано, напр. итераторами

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)