Autorské riešenie
[stiahni]

Všimnime si najskôr, ako taký bombulovník vyzerá. Jeho konáre vyzerajú podobne ako celý bombulovník. Rozdiel je len v tom, že majú o jeden konár menej. Vyzerajú, ako o jeden rok mladší a o polovicu menší bombulovník. Mohli by sme teda povedať, že na konci každého konára bombulovníka vyrastajú dva ďalšie, o rok mladšie bombulovníky polovičnej veľkosti. Jeden v rovnakom smere ako konár z ktorého vyrastá, druhý otočený o 90° vľavo. Neplatí to samozrejme pre konáre, ktoré sú na koncoch. Na konci každého konára je samozrejme ešte bombula.

Procedúra pre kreslenie bombulovníka by teda mohla na začiatku vyzerať asi takto:

viem bombulovnik :vek :dlzka
  do :dlzka
  kruh :dlzka/2
  vl 90
  bombulovnik :vek-1 :dlzka/2
  vp 90
  bombulovnik :vek-1 :dlzka/2
  vz :dlzka
]
koniec

Nakreslíme konár danej dĺžky (do :dlzka), potom bombulu (kruh :dlzka/2). Natočíme sa o 90° vľavo a nakreslíme o rok mladší a o polovičku menší bombulovnik (bombulovnik :vek-1 :dlzka/2). Natočíme sa do pôvodného smeru a nakreslíme druhý z bombulovníkov. Nakoniec sa vrátime tak, kde sme začali (vz :dlzka).

Lenže, ak by sme procedúru nechali v tomto tvare, bombulovníky by sa kreslili do nekonečna. Po nakreslení bombule by sme začali kresliť ďalší bombulovník. Nakreslili by sme jeho bombulu a začali kresliť ďalší bombulovník. A tak stále ďalej. Musíme teda zabezpečiť, aby sa tak nestalo. Využijeme vek bombulovníka. Každý ďalší bombulovník je o rok mladší ako predchádzajúci. Ak jeho vek je aspoň 1, môžeme ho nakresliť. V opačnom prípade už nie. Doplníme do procedúry podmienku, ktorá bude kontrolovať vek práve kresleného bombulovníka.

viem bombulovnik :vek :dlzka
  ak :vek >= 1 [
    do :dlzka
    kruh :dlzka/2
    vl 90
    bombulovnik :vek-1 :dlzka/2
    vp 90
    bombulovnik :vek-1 :dlzka/2
    vz :dlzka
  ]
koniec

 

Vaše zaujímavé riešenia a najčastejšie chyby

Rekurziu v tejto úlohe našiel len jeden tím. Ostatní sa pokúšali úlohu riešiť pomocou cyklov. To sa im však nepodarilo.