Napíšte rekurzívnu procedúru, ktorá pri vstupe čísla n vypíše čísla od n po 1.
Riešenie:
-
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; |
- 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. |