Рекурсивные алгоритмы
Рефераты >> Программирование и компьютеры >> Рекурсивные алгоритмы

Рассмотрим ещё один пример использования рекурсии – вычисление N-ого по счёту числа Фибоначчи. Числа Фибоначчи составляют последовательность, очередной элемент которой вычисляется по двум предыдущим значениям:

F­n=Fn-1 + Fn-2 .

Нулевое и первое значения должны быть заданы, их значения равны единице. Последовательности такого рода применяются, например, в программах генераторах случайных чисел. Вычисление 20-ого числа Фибоначчи реализовано в программе Fibonacci (Листинг 4). Впрочем, номер числа можно изменить, задав в описании константы другое значение.

Листинг 4. Программа вычисления 20-ого числа Фибоначчи.

program Fibonacci;

uses Crt;

const n=20;

function F(n: word): longint;

begin

if keypressed then

halt;

if (n=0) or (n=1) then

F:=1

else F:=F(n-1)+F(n-2); {рекурсивный вызов}

end;

function G(n: word): longint;

var x,y,t: longint; k: word;

begin

x:=1;

y:=1;

for k:=2 to n do

begin

t:=y;

y:=x+y;

x:=t;

end;

G:=y;

end;

begin

clrscr;

textcolor(lightgray +128);

write(‘Считаю .’);

textcolor(lightgray);

writeln(‘—Ждите ответа--’);

writeln;

writeln(‘Рекурсивный алгоритм : F(‘, n, ’)= ’, F(n));

writeln;

writeln(‘Итерационный алгоритм : F(‘, n, ’)= ’, G(n));

gotoxy(1,1);

clreol;

gotoxy(1,7);

write(‘Нажмите <Enter>’);

end.

В этой программе реализованы два метода решения задачи вычисления числа Фибоначчи. Один назовём итерационным методом – он заключается в прямом программировании итерационной формулы для чисел Фибоначчи. В функции G для этого используются три вспомогательные переменные типа LongInt.

Решение с использованием рекурсивных вызовов запрограммировано с помощью функции F. Оператор, вычисляющий её значение, два раза вызывает саму эту функцию. Текст рекурсивной функции короче, лаконичнее итерационной функции. Процедура ClrEol из модуля Crt удаляет все символы строки от текущего положения курсора до её конца.

2. ПРЕДСТАВЛЕНИЕ ДАННЫХ В ПАМЯТИ ЭВМ И ИХ ОБРАБОТКА

СИМВОЛ

КОД

РАЗМЕР

ДЕСЯТИЧНЫЙ

ДВОИЧНЫЙ

В

130

10000010

1 байт

о

174

10101110

1 байт

р

224

11100000

1 байт

о

174

10101110

1 байт

н

173

10101101

1 байт

и

168

10101000

1 байт

н

173

10101101

1 байт

Пробел

32

00100000

1 байт

A

128

10000000

1 байт

л

171

10101011

1 байт

е

165

10100101

1 байт

к

170

10101010

1 байт

с

225

11100001

1 байт

а

160

10100000

1 байт

н

173

10101101

1 байт

д

164

10100100

1 байт

р

224

11100000

1 байт

Пробел

32

00100000

1 байт

1

49

00110001

1 байт

5

53

00110101

1 байт

.

46

00101110

1 байт

0

48

00110000

1 байт

4

52

00110100

1 байт

.

46

00101110

1 байт

1

49

00110001

1 байт

9

57

00111001

1 байт

8

56

00111000

1 байт

5

53

00110101

1 байт

Личные данные займут в памяти ЭВМ 28 байтов.

Сложение числа и месяца рождения в двоичном формате: +1111

0100

10011

(10011)2=(19)10

Вычитание месяца из числа рождения в двоичном формате: _1111

0100

1011

(1011)2=(11)10

3. РАЗРАБОТКА ПРОГРАММ

3.1. Программа роста банковского вклада по месяцам

Программа спрашивает с защитой от неверного введения данных следующую информацию:

§ начальный размер вклада (1000 .10000);

§ размер периодических платежей (от 1% до 10% от начального вклада);

§ размер процентной ставки вклада (0.5% .4% в месяц).


Страница: