Silnia w pascalu - rekurencyjnie

Algorytm rozwiązywania równania liniowego

 

Schemat blokowy rekurencyjnego algorytmu obliczania silni

program silnia_rek;

function silnia(n: integer): integer;
begin
  if n>1 then
    silnia:=n*silnia(n-1)
  else
    silnia:=1;
end;

var n, wynik: integer;
begin
  write('n = ');
  readln(n);
  wynik:=silnia(n);
  writeln(n,'! = ',wynik);
  readln;
end.

 

 

 Pierwszą linię programu możemy traktować jako ozdobnik, jednak wymagany przez składnię języka pascal. Każdy program w pascalu musi się zaczynać słowem kluczowym program poprzedzającym nazwę programu, nie wnosi nic do realizacji algorytmu.

 W trzeciej linii deklarujemy funkcję o nazwie silnia, przyjmującą jeden parametr typu całkowitego (n) i zwracającą w wyniku liczbę całkowitą. Pomiędzy słowami kluczowymi begin z linii 4 i end z linii 9 zawarte jest ciało funkcji - zestaw instrukcji wykonywany przez program po wywołaniu tej funkcji.

 W linii 5 sprawdzamy czy n jest większe od 1 - blok (3) algorytmu. Jeżeli tak to w linii 6 określamy wynik funkcji jako n pomnożone przez wartość funkcji silnia (tej samej funkcji silnia, którą aktualnie definiujemy) dla n pomniejszonego o 1 (4). W tym miejscu funkcja silnia wywołuje samą siebie. Taką funkcję nazywamy funkcją rekurencyjną. Jeśli n nie jest większe od 1 to w linii 8 ustalamy wynik funkcji równy 1 (warunek zakończenia rekurencji) - blok (5).

 Przed rozpoczęciem części operacyjnej programu w linii 11 deklarujemy dwie zmienne typu integer (zmienne n oraz wynik). W pascalu wszystkie zmienne muszą być zadeklarowane przed rozpoczęciem bloku kodu. Deklarując zmienną musimy podać jakiego typu dane będą w niej przechowywane. Deklaracja zmiennych rozpoczyna się słowem kluczowym var.

 12 linia zawierająca słowo kluczowe begin odpowiada blokowi startowemu (1) naszego algorytmu.

 Linie 13 i 14 realizują operację wejścia/wyjścia (2), w której pobierane są dane wejściowe - liczba n, której silnię chcemy obliczyć.

 W linii 15 zmiennej wynik przypisujemy wynik działania funkcji silnia wywołanej z argumentem n.

 W linii 16 wypisujemy otrzymany wynik (blok wejścia-wyjścia (6)).

 Instrukcja readln w linii 17 nie ma żadnego związku z wykonaniem algorytmu. Służy ona zatrzymaniu programu do czasu naciśnięcia klawisza enter, co zapobiega natychmiastowemu zamknięciu okienka z programem.

 Instrukcja end. z linii 18 kończy działanie programu (blok końca algorytmu (7)).