MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Кибернетика -> Рекурсия

Название:Рекурсия
Просмотров:175
Раздел:Кибернетика
Ссылка:Скачать(10 KB)
Описание: Следующий пример позволяет вычислить n-ный элемент ряда Фибоначчи как итеративно (то есть в цикле, начиная с х[1] до х[n]), так и рекурсивно (n- ный элемент ряда является суммой двух предшествующих элементов).

Университетская электронная библиотека.
www.infoliolib.info

Часть полного текста документа:

Содержание Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Пример 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Пример 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Пример 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Пример 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Пример 5 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Рекурсия. Рекурсией называется ситуация, когда процедура или функция сама себя вызывает. Вот типичная конструкция такого рода: procedure proc(i:integer); begin anweisungen1; if bedingung then proc(i+1); anweisungen2; end; Вызов proc(1) означает, что proc вызывает себя раз за разом с помощью proc(2), proc(3),.. до тех пор, пока условие bedingung не отменит новый вызов. При каждом вызове выполняется оператор anweisungen 1, после чего порядок выполнения операторов прерывается новым вызовом proc(i+1). Чтобы для каждого вызова был отработан и оператор anweisungen2, все локальные переменные процедуры сохраняются в стеке. Стеком является структура магазинного типа LIFO (Last In First Out), т.е. если, например, при proc(10) условие более не выполняется, anweisungen2 выполняется со значениями, обрабатываемыми в обратном порядке для proc(9),...,proc(1). Локальные параметры помещаются в стек один за другим и выбираются из стека в обратной последовательности (латинское recurrere означает "возвращение назад"). В Паскале можно пользоваться именами лишь тогда, когда в тексте программы этому предшествует их описание. Рекурсия является единственным исключением из этого правила. Имя proc можно использовать сразу же, не закончив его описания. Пример1 представляет собой бесконечную рекурсию, с помощью которой можно установить, насколько велик стек. При этом помните, что при использовании директивы (*$S+*) при переполнении стека получим сообщение об ошибке; а при использовании директивы (*$S-*) - нет, а значит, мы скорее всего столкнемся с зависанием системы. Установкой по умолчанию является (*$S+*). Программа будет прервана с выдачей сообщения об ошибке "Error 202: stack overflow error ("Ошибка 202: переполнение стека"). Пример1: Program stack_test; {программа проверки стека} procedure proc(i:integer); begin if i mod 1024 = 0 then writeln(i:6); proc(i+1); end; begin proc(1); end. Стек связан с другой структурой памяти - с динамической областью. С помощью директивы (*$М*) можно управлять размером стека. Рекурсия не должна восприниматься как некий программистский трюк. Это скорее некий принцип, метод. Если в программе нужно выполнить что-то повторно, можно действовать двумя способами: - с помощью последовательного присоединения (или итерации в форме цикла); - с помощью вложения одной операции в другую (а именно, рекурсий). В следующем примере2 один раз счет от 1 до n ведется с помощью цикла, а второй - с помощью рекурсии. При этом хорошо видно, как заполняется, а затем освобождается стек. В процедуре rekursion операция writeln(i:30) выполняется перед рекурсивным вызовом, после чего writeln(i:3) освобождает стек. Поскольку рекурсия выполняется от n до 1, вывод по команде writeln(i:30) выполняется в обратной последовательности n,n-1,...,1, а вывод по команде writeln(i:3) - в прямой последовательности 1,2,...,n (согласно принципу LIFO - последним пришел, первым обслужен). Пример2:
    Показывает принципиальное различие между итерацией и рекурсией: итерации необходим цикл и локальная переменная k как переменная цикла. Рекурсии ничего этого не требуется!
    
    program iterativ_zu_rekursion; var n:integer; procedure rekursion (i:integer); begin writeln(i:30); if i < 1 then rekursion(i-1); writeln(i:3); end; (* Рекурсия *) procedure schleife(i:integer); var k:integer; bagin k :=1; while k 1 then convert(z div 8); (* Это рекурсивный вызов *) write(z mod 8:1); end;
    begin writeln('Введите некоторое положительное число:'); readln(z); writeln('Десятичное число:',z:6); write('Восьмеричное число: '); convert(z); end. Один из наиболее ярких примеров применения рекурсии дают числа Фибоначчи. ............




Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Решение задач с помощью модели Солоу
Просмотров:273
Описание: РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА ПЕНЗЕНСКИЙ ФИЛИАЛ Кафедра «Управления инновациями» ОТЧЕТ о выполнении лабораторной работы

Название:Регулирование водного, воздушного и питательного режимов почв с помощью гидротехнических, культуртехнических и химических мелиораций
Просмотров:308
Описание: «Регулирование водного, воздушного и питательного режимов почв с помощью гидротехнических, культуртехнических и химических мелиораций» Содержание 1. Введение 2. Проект ос

Название:Создание графических объектов с помощью псевдографики
Просмотров:338
Описание: Пермский государственный технический университет Кафедра: Информационных технологий и автоматизированных систем Лабораторная работа по теме: «Создание графических объектов с по

Название:Решение задачи об оптимальной интерполяции с помощью дискретного преобразования Фурье (ДПФ)
Просмотров:321
Описание: Введение Предложенная мне тема «Решение задачи об оптимальной интерполяции с помощью дискретного преобразования Фурье (ДПФ)» написана на основе книги В. Н. Малоземова и С. М. Машарского «Основы дискретного гармон

Название:Исследование показателей меди с помощью корреляционного и тренд-анализов
Просмотров:202
Описание: Российский государственный геологоразведочный университет им. С. Орджоникидзе Кафедра менеджмента и маркетинга Курсовой проект По дисциплине: Статистика На тему: "Исследование показат

 
     

Вечно с вами © MaterStudiorum.ru