Sposoby przekazywania parametrów oraz rekurencja

z01

Jeśli zmienna lokalna ma taką samą nazwę jak zmienna w bloku zewnętrznym, to zmienna zewnętrzna jest przesłonięta przez zmienną lokalną. Na zewnątrz tego bloku nadal widoczna jest zmienna zewnętrzna.

Program może komunikować się z wywołanymi procedurami i funkcjami:

• poprzez parametry – gdy trzeba przekazywać różne zmienne lub wartości, poprawia to również czytelność procedur i funkcji, gdyż posiadają one jasno zapisany interfejs komunikacji.

• poprzez zmienne globalne – gdy dotyczy to zmiennych szczególnie ważnych w obrębie całego programu lub gdy dotyczy to dużych rozmiarowo struktur danych, ale ogólnie zmniejsza czytelność programu. Poprawna organizacja wymiany informacji pomiędzy blokami programu jest kwestią kompromisu i stylu programowania.

Przykład

p11

Efekt działania.

p11-b

 

Rekurencja

Czy patrzyłeś kiedyś w lustro, w którym było widać drugie lustro, a w tym lustrze znowu pierwsze lustro i w tym pierwszym znowu to drugie i tak bez końca? Obraz tworzy się praktycznie nieprzerwanie.

Coś podobnego dzieje się w rekurencji. Rekurencja to wywołanie jakiejś metody przez samą siebie. W pewnym miejscu następuje ponowne wywołanie siebie od początku. Gdyby nie przerwać rekurencji, trwałaby w nieskończoność.

W programowaniu pewna procedura wywołuje siebie samą i coraz bardziej zagnieżdża się w swoim kodzie. Wiąże się to z odłożeniem pewnej pamięci na tzw. stos. Gdyby nie przerwać tego ‘błędnego koła’ pamięć w końcu się skończy, a program przestanie działać.

Rekurencję wykorzystuje się do niektórych metod, takich jak: wypełnianie obrazka jakimś kolorem, wykrywanie min w grze saper, obliczanie pewnych działań matematycznych. Przydaje się także podczas tworzenia drzew katalogów, wyszukiwania plików, budowania forum internetowych i wielu innych zastosowań.

Przykład

PROGRAM silnia(input,output);

VAR

n: integer;

s: integer;

FUNCTION sil(x: integer): integer;

BEGIN

IF x=0 THEN sil:=1

ELSE sil:=x*sil(x-1);

END;

BEGIN

write(’Podaj n=’);

read(n); s:=sil(n);

writeln(’Silnia wynosi =’,s);

readln;

END.


 

Funkcja silnia jest wykorzystywana do rekurencyjnego obliczania wartości silni z n !

Uwaga program liczy poprawnie silnię jedynie dla małych wartości n. Dlaczego?

Rekurencja polega na możliwości wywoływania funkcji przez samą siebie, oczywiście z innymi parametrami n!=n*(n-1)*(n-2)…*1= n*(n-1)!


 

Efekt działania programu.

silnia-r01

Author: ZSE

Share This Post On
Skip to content