Глава 7 Программирование рекурсивных алгоритмов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Глава 7 Программирование рекурсивных алгоритмов



Понятие рекурсии

Рекурсия - это способ определения процесса/объекта «в терминах самого себя», в терминах некоторого более простого случая этого же процесса/объекта. Рекурсивные определения используются во многих об­ластях науки, особенно в математике. В математике рекурсией называет­ся способ описания функций или процессов через самих себя. Примером рекурсивно описываемой функции является факториалъная функция:

0! = 1;

для всех n > 0 n! = n*(n-1)!,

которая для n > 0 определяется рекуррентным соотношением через значение факториала от (n-1); в свою очередь, (n-1)! определяется через (n-2)! и т. д. до сведения к значению 0!, которое определено явно и равно единице. Любое рекурсивное описание должно содержать явное опреде­ление функции для некоторых/начальных значений аргумента/аргумен­тов, к которому сводится процесс вычисления значения функции в общем случае. Число промежуточных вычислений этой же функции в процессе вычисления ее значения для заданных аргумента/аргументов - это глуби­на рекурсии. Для факториальной функции глубина рекурсии при любом значении аргумента очевидна, например при вычислении 3! рекурсия имеет глубину в 3 уровня. Однако обычно глубина рекурсии не является столь очевидной даже при простейших описаниях. Примером может служить рекурсивное определение биномиальных коэффициентов или числа сочетаний :

= 1 для п > 0;

= 0 для т > п 0;

= + для n т>о.

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

Рекурсивные определения часто используются и в информатике. На­пример, описание синтаксиса формальных языков с помощью БНФ- нотаций (форм Бэкуса-Наура). В языках программирования рекурсия ис­пользуется как способ описания подпрограмм (прежде всего функций), содержащих прямо или косвенно обращение к себе самой. Для исполне­ния таких подпрограмм требуется особая организация вычислительного процесса, так как при рекурсивных вычислениях необходимо сохранение информации об иерархии связей и локальных переменных всех рекур­сивных вызовов, чтобы по окончании цепочки рекурсивных вызовов можно было восстановить каждое предшествующее прерванное состоя­ние подпрограммы. Почти все системы рекурсивного программирования основываются на идее стека. Стеком является структура памяти мага­зинного типа LIFO (Last In First Out) - «последним пришел - первым ушел».

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



Поделиться:


Последнее изменение этой страницы: 2017-02-17; просмотров: 187; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.229.17.20 (0.004 с.)