Рекурсивные алгоритмы (преимущества и недостатки)
Реферат, 21 Ноября 2013, автор: пользователь скрыл имя
Краткое описание
Целью нашей работы является рассмотрение основных понятий, связанных с рекурсией и возможностей использования рекурсии для решения задач.
Задачами реферата являются:
Рассмотреть понятия «рекурсия», «алгоритм», «рекурсивный алгоритм».
Выявить преимущества и недостатки рекурсивного алгоритма.
Рассмотреть примеры задач с рекурсивным алгоритмом.
Прикрепленные файлы: 1 файл
Рекурсивные алгориты.doc
— 208.50 Кб (Скачать документ)Если пользователь ввел число больше единицы, то выполняется цикл, в теле которого на каждой итерации значение переменной factorial умножается на следующее натуральное число (переменную i).
Программа на языке Паскаль:
Program fac;
Uses crt;
Var
factorial: longint;
n, i:byte;
Begin clrscr;
write(‘n=’);
readln (n);
factorial:=1;
for i:=2 to n do
factorial:=factorial*i;
writeln (‘n!=’, factorial);
readln;
end.
Числа Фибоначчи
Задача: Вывести на экран ряд чисел Фибоначчи, состоящий из n элементов.
Решение: Числа Фибоначчи – это элементы числовой последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …, в которой каждое последующее число равно сумме двух предыдущих.
Описание переменных:
n – количество элементов ряда;
a, b – значения двух последних элементов ряда;
c – буферная («запасная») переменная;
i – счетчик.
Алгоритм решения задачи:
- Получить значение n.
- Присвоить a и b значения 0 и 1 соответственно (это первые числа ряда Фибоначчи). Вывести их на экран.
- Выводить на экран сумму a и b;
- Сохранить значение переменной b в c;
- Записать в b сумму a и b;
- Присвоить a значение с.
Программа на языке Паскаль:
Program chisla;
Uses crt;
Var
a, b, c, i, n: integer;
begin clrscr;
write(‘n=’);
readln(n);
a:=0;
write(a,’ ’);
b:=1;
write(b, ‘ ’);
for i:=3 to n do begin
write(a+b, ‘ ‘);
c:=b;
b:=a+b;
a:=c;
end;
readln
end.
ЗАКЛЮЧЕНИЕ
На основании проведенного исследования можно сделать несколько выводов:
- Во-первых, рекурсивные алгоритмы есть универсальное средство решения разнообразных алгоритмическим проблем. Любая разрешимая задача такого рода имеет рекурсивное решение, которое при этом отличается изяществом и простотой для восприятия человеком;
- Во-вторых, рекурсивные алгоритмы часто имеют более низкую асимптотическую сложность, чем эквивалентные им итерационные. То есть теоретически они быстрее;
- В-третьих, развитие современных программных средств сделало практическое использование рекурсии достаточно несложным делом, а новые концепции и технологии программирования преодолели проблему низкой эффективности рекурсивных программ, созданную необходимостью вызова большого количества подпроцедур.
Рекурсия отражает черту абстрактного мышления, проявляющуюся в самых различных приложениях (в математике, синтаксическом анализе и трансляции, древовидной сортировке и обработке данных с динамической структурой, шахматных задачах и т.д.). именно в задачах такого рода лучше применять рекурсивные алгоритмы, так как они, избавляют от необходимости последовательного описания процессов, к тому же, практически все действующие языки программирования поддерживают рекурсию.
Но следует сказать, что всегда полезно подумать о замене рекурсии на циклические алгоритмы. Однако в некоторых случаях решение задачи без рекурсии может быть чрезвычайно сложным и прирост производительности не будет строить потраченных усилий.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Баррон Д. Рекурсивные методы в программировании (Мир, 1974, 80 стр.).
- Зуев Е.А. Turbo Pascal. Практическое программирование. – М.: Приор, 1997. – 336с.
- Немнюгин С.А. Turbo Pascal: практикум – СПб.: Питер, 2001. – 256с.
- Турбо Паскаль 7.0. Самоучитель. – СПб.: Питер; К.: Издательская группа BHV, 2002.
- Фаронов В.В. Турбо Паскаль 7.0. Практика программирования. Учебное пособие. Издание 7-е, переработанное. – М.: «Нолидж», 2000, - 416 с.
- STUDLAB.COM Рекурсия [электронный ресурс] http://studlab.com/news/rekurs
ija/2011-05-31-109 - Горлов А.В. Рекурсивные алгоритмы [электронный ресурс] http://otherreferats.allbest.r
u/programming/00085599_0.html