priama rekurzia

Príklad 1

Napíšte rekurzívnu procedúru, ktorá pri vstupe čísla n vypíše čísla od n po 1.

Riešenie:
  1. Pri výpise čísla od n po 1 postupujeme tak, že najprv vypíšeme číslo n, potom n-1, potom n- 2 a takto opakujeme až po 1.

    Ak by sme si to chceli rozdeliť na menšie podproblémy, tak pri zadaní čísla n vypíšeme číslo n a ostane nám podproblém stupňa n-1.

    Pomocou rekurzie by sme mali hodnotu n ako parameter procedúry a jej príkazy by boli: najprv výpis hodnoty parametra a potom rekurzívne volanie tej istej procedúry so zníženou hodnotou parametra.

    Naša procedúra bude vyzerať takto:

    procedure vypis1(n:integer);
    begin
      write(n);
      vypis1(n-1);
    end;

  2. Takto vytvorená procedúra bude síce vypisovať číslo n a nižšie, ale nikdy neskončí. Potrebujeme do procedúry doplniť podmienku ukončenia rekurzívneho vnárania. Keďže máme vypisovať číslo od n po 1, tak ak n bude menšie ako 1, tak sa nemá už nič vykonať.
    Teda podmienka rekurzívneho vnárania bude ak n>0 tak sa vypíš.
    Upravená procedúra vyzerá takto:
procedure vypis(n:integer);
begin
if n>0 then
begin
  write(n);
  vypis(n-1);
end;
end;

Takto definovaná procedúra bude vypisovať čísla od n po 1.