Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoretichesky_obzor_po_teme_Rekursia.pdf
Скачиваний:
12
Добавлен:
30.03.2015
Размер:
306.77 Кб
Скачать

N : Byte;

I : Byte;

Z : Word;

Procedure PrintRez;

Var I : Byte;

Begin

For I:=1 To N Do

If D[I]='+' Then Write(A[I],' ');

WriteLn;

End;

Procedure Poisk(K:Byte;S:Integer);

Var I : Byte;

Begin

If S+A[K]<=Z Then Begin

S:=S+A[K];

D[K]:='+';

If S=Z Then PrintRez

Else For I:=K+1 To N Do Poisk(I,S);

S:=S-A[K];

D[K]:=' ';

End;

End;

Begin

Write('Кол-во членов последовательности '); ReadLn(N);

For I:=1 To N Do

Begin

WriteLn('Введите ',I,'-ый член последовательности');

ReadLn(A[I]);

D[I]:=' ';

End;

Write('Z=');ReadLn(Z);

For I:=1 To N Do Poisk(I,0);

End.

Дополнительно. Задача о Ханойских башнях

Ханойские башни – это классическая задача на использование рекурсии.

17

A B C

На площадке A находится пирамида из дисков разного размера. Требуется перенести её на площадку B в том же виде, соблюдая следующие правила:

перекладывать можно только по одному диску, взятому сверху пирамиды,

класть диск можно только на основание площадки, либо на диск большего размера,

площадка C является вспомогательной

Алгоритм переноса:

1.Если N=0, то ничего не делать.

2.Если N>0, то

-перенести N-1 диск на C через B,

-диск A перенести на B через С,

-переместить N-1 диск на B через A.

При выполнении пункта 2 будет три состояния пирамид:

18

Построим программу на Паскале с использованием рекурсивной процедуры Hanoi и фактических имён площадок 1,2,3.

Program Monah; Var N: byte;

Procedure Hanoy(N:byte; A,B,C: char); begin

if N>0 then Hanoy(N-1,A,C,B); writeln(A,’=>’,B); Hanoy(N-1,C,B,A)

end; begin

writeln(‘Число дисков’); readln(N); Hanoy(N,’1’,’2’,’3’)

end.

Пусть N=3

Сбор информации по рекурсивному дереву идёт слева направо и сверху вниз. Таким образом, получаем следующий алгоритм переноса:

1->2, 1->3, 2->3, 1->2, 3->1, 3->2, 1->2.

19

Литература

1.Окулов С. М. Программирование в алгоритмах / С. М. Окулов. — М.: БИНОМ. Лаборатория знаний, 2002. — 341 с: ил.

2.http://it.kgsu.ru/Ob_Pas/obpas102.html

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]