русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Возможности получения рекурсии


Дата добавления: 2015-08-06; просмотров: 1009; Нарушение авторских прав


 

Нет готовых рецептов, как для данной произвольной проблемы получить (рекурсивный) алгоритм ее решения. Однако есть некоторые рекомендации.

1) органически рекурсивные определения

Некоторые рекурсивные функции являются точным "слепком" с соответствующего определения (вспомните определение факториала числа).

 

2) извлечение рекурсии из постановки задачи

В большинстве случаев, однако, решаемая задача не является алгоритмически сформулированной. Поэтому пытаются прийти к (рекурсивному) алгоритму, сводя общую задачу к "более простым" задачам того же рода. Иногда непосредственной ясно, как это сделать, но чаще всего требуется интуиция.

 

Пример 6. Определение операции сложения двух чисел через рекурсивные отношения.

В силу законов ассоциативности и коммуникативности имеем:

a+b=a+b+1-1=(a+1)+(b-1)

Поэтому операцию сложения можно ввести так:

 

function plus (a, b: integer): integer;

begin

if b=0 then plus := a

else

if b>0 then plus := plus (succ(a), pred(b))

else plus := plus (pred(a), succ(b));

end;

 

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

 

3) вложение

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

 

Пример 7. Классический пример использования применения такого приема вложения дал Маккарти в 1962 г. Исходная задача звучала следующим образом: "Установи, является ли заданное положительное натуральное число n простым". При этом предполагалось, что известно определение простого числа: натуральное число называется простым, если оно больше единицы и не делится ни на одно число, большее или равное двум и меньшее этого числа.



Удачным обобщением будет такая задача (в которой вводится дополнительный параметр): "Установи, верно ли, что заданное натуральное число не делится ни на одно число, большее или равное m и меньшее этого числа".

 

4) метод родственных задач

При использовании этого метода к задаче "прибавляют" одну или несколько задач таким образом, чтобы функции из возникающей системы опирались друг на друга.

 

Пример 8. Определить, содержит ли последовательность знаков m четное число знаков. При этом справедливо утверждение: число знаков в последовательности четно тогда и только тогда, когда все знаки могут быть сгруппированы в пары.

Введем родственную задачу: Определить, содержит ли последовательность знаков m нечетное число знаков.

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

 



<== предыдущая лекция | следующая лекция ==>
Понятие рекурсии | Формы рекурсивных процедур


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.434 сек.