Пример
5!= 1*2*3*4*5=120.
Рекурсивное определение:
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1*0!
0!=1
F1=1
F2=1
F3= 1+1=2
F4= 1+2=3
F5= 2+3=5
F6= 3+5=8
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1*0!
0!=1
базисное выражение
Рекурентное выражение
function fact (n:word):longint;
begin
if n=0 then fact:=1
else fact:=n*fact(n-1);
end;
Программы, в которых используются рекурсивные алгоритмы отличаются простотой, наглядностью и компактностью текста. Это обуславливается тем, что рекурсивная процедура указывает, что нужно делать, а нерекурсивная больше акцентирует внимание на том, как нужно делать.
Function Func (t:<тип>):тип;
Begin
<действия на входе в рекурсию>;
If <усл> then Func:=Func(t+f);
<действия на выходе из рекурсии>;
End;
Procedure Rec (t:<тип>);
Begin
<действия на входе в рекур-ю>;
If <усл> then Rec(t+f);
<действия на выходе из рекур-ии>;
End;
Рекурсия
Procedure Inp (i,n:byte);
Var a:integer;
Begin
readln(a);
if i<=n then Inp(i+1,n);
End;
…
i:=0; n:=10;
Inp(0,10);
Рекурсия
procedure Bit (n:word);
begin
if n>1 then bit (n div 2);
write (n mod 2);
end;
Таким образом, какой-либо переменной на разных уровнях рекурсии будут соответствовать различные ячейки памяти.
Поэтому воспользоваться значением переменной i-го уровня можно только находясь на этом уровне.
function fact (n:word):longint;
begin
if n=0 then fact:=1
else fact:=n*fact(n-1);
end;
N=5 | n=4 | n=3 | n=2 | n=1 | n=0 |
function func(x:real):real;
begin
func:=x+12;
end;
Procedure Root ( a,b:real; var r:real);
var x:real;
Begin
if abs(b-a)/2
x:=(a+b)/2;
if func(a)*func(x)>0
then root(x,b,r)
else root(a,x,r);
end;
end;
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть