V matematice pojem rekurse znamená způsob definování funkce anebo procesu pomocí jeho samotného.
Rekursívní volání procedur a funkcí v Pascalu
Říkáme, že procedura je rekurzívní, je-li v těle procedury příkaz volání téže procedury.
Říkáme, že funkce je rekurzívní, nachází-li se její indentifikátor v těle téže funkce na pravé straně.
Rekursivita se získá automaticky jako důsledek organizace zásobníkové paměti. Při volání procedury se na vrcholu zásobníku vymezí oblast potřebná pro:
- lokální proměnné
- pomocné proměnné generované překladačem
- parametry, se kterými byla procedura volána
- výsledek funkce (jen pro funkce)
- informace pro odkazy na nelokální proměnné a pro správný návrat z procedury
Zadání:
Function Faktorial(N:longint):longint;
{Funkce vypocte faktorial zadaneho cisla (do 12)}
begin {Faktorial}
if N=1 then Faktorial:=1 else
Faktorial:=Faktorial(n-1)*n;
end; {Faktorial}
Seznam algoritmů
Zadání:
Function NSD(a,b:integer):integer;
{Funkce vypocte nejvetsi spolecny delitel dvou cisel.}
begin {NSD}
if a=b then NSD:=a
else if a>b then NSD:=NSD(a-b,b)
else NSD:=NSD(a,b-a);
end; {NSD}
Seznam algoritmů
Zadání:
Procedure FromOneToN(N:word);
{Procedura rekurzivne vypise cisla od 1 do N.}
begin {FromOneToN}
if N>1 then FromOneToN(n-1);
write(n,' ');
end; {FromOneToN}
Seznam algoritmů
Zadání:
Procedure FromNToOne(N:word);
{Procedure rekurzivne vypise cisla od N do 1.}
begin {FromNToOne}
write(n,' ');
if N>1 then FromNToOne(n-1);
end; {FromNToOne}
Seznam algoritmů
Zadání:
( n ) n! ( ) = -------- ( k ) k!(n-k)!Lze však odvodit následující rekurzívní vztahy:
( n ) ( n ) n ( n-1 ) ( ) = 1 ; ( ) = - ( ) ( 0 ) ( k ) k ( k-1 )Algoritmus:
Function BinKoef(n,k:integer):integer;
{Funkce vypocte binomicky koeficient (n nad k)}
begin {BinKoef}
if k=0 then
BinKoef:=1
else
BinKoef:=BinKoef(n-1,k-1) * n div k;
end; {BinKoef}
Seznam algoritmů
|
|
20. 9. 1999 |
|
|
||
|
|