ВУЗ:
Составители:
Рубрика:
28
вращаться. Таким образом, действия на рекурсивном спуске совершаются в пря-
мом порядке, а обещанные действия осуществляются на рекурсивном подъеме в
порядке, обратном порядку обещаний.
4) Каскадная рекурсия.
procedure p(n);
begin
S(n)
if B1(n) then p(n-1);
if B2(n) then p(n-1);
end;
5) Удаленная рекурсия.
function f(i: integer): integer;
begin
if B1(n) then Result:=...
else Result:=f(f(i-1));
end;
В этом виде рекурсии результат рекурсивного вызова
является параметром
другого рекурсивного вызова. Наиболее известным примером удаленной рекур-
сии является функция Аккермана:
⎪
⎩
⎪
⎨
⎧
>>−−
=>−
=+
=
.0,0если)),1,(,1(
,0,0если),1,1(
,0если,1
),(
mnmnAnA
mnnA
nm
mnA
В последних двух видах рекурсии рекурсивные вызовы образуют древовид-
ную структуру.
2.5 Пример плохого использования рекурсии
Пример 7. Пример плохого использования рекурсии. Числа Фибоначчи.
Как известно, определение чисел Фибоначчи рекурсивно:
⎩
⎨
⎧
>+
=
=
−−
.2,
,2,1,1
21
nff
n
f
nn
n
Данное определение легко переводится в рекурсивную функцию:
function Fib(n: integer): integer;
begin
if (n=1) or (n=2) then
Result:=1
else Result:=Fib(n-1)+Fib(n-2);
end;
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »