Object Pascal/Procedury i funkcje: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
→‎Przykład deklaracji: w deklaracji brakowało typu zwracanego wyniku
Adiblol (dyskusja | edycje)
→‎Rekurencja: rozbudowa, przykład
Linia 172:
 
===Rekurencja===
Rekurencja jest to zdolność procedury lub funkcji do wywoływania samej siebie. Przykład:
 
<source lang="Pascal">
function Potega(a:real; n:integer): real;
begin
if (n=0) and (a<>0) Potega := 1;
if (n=1) Potega := a;
if (n>1) Potega := a * Potega(a, n-1);
if (n<0) Potega := 1 / Potega(a, -n);
end;
</source>
 
Skorzystaliśmy tutaj z definicji rekurencyjnej potęgi:
 
<math>
{a^n} = \begin{cases}
1 \ \operatorname{dla} \ n = 0 \cap a \neq 0 \\
a \ \operatorname{dla} \ n = 1 \\
a \cdot a^{n-1} \ \operatorname{dla} \ n > 1 \\
\frac{1}{a^{-n}} \ \operatorname{dla} \ n < 0
\end{cases}
</math>
 
Oczywiście do obliczania potęg o większym od zera wykładniku prostsza jest definicja iteracyjna:
 
<math>
a^n = \underbrace{a \cdot a \cdot \dots \cdot a}_n
</math>
 
Rekurencja pochłania więcej pamięci RAM, a często i procesora, więc działa wolniej od pętli. Dlatego należy ją stosować tylko wtedy, gdy jej użycie ma sens, np. przy operacjach na katalogach i ich podkatalogach.
 
{{Nawigacja|Object Pascal|