Stránka 1 z 1

Řešení rekurze + vysvětlení?

Napsal: 21 lis 2013 19:20
od Widlajz
Ahoj,

mám menší problém, neumím vyřešit rekurzi v příloze.

Byl by někdo tak ochotný, vypočítal jí + se mi snažil vysvětlit jak došel k výsledku? Děkuji

V úterý píšu zápočtový test, ale neumím si s tím poradit. Ještě jednou děkuji.

Re: Řešení rekurze + vysvětlení?

Napsal: 21 lis 2013 20:01
od faraon
No fuj, to je husný struktogram. Tak právě proto mám radši klasické vývojové diagramy :lol:

Takže zavoláš proceduru Jonatán, a ta načte číslo ze vstupu do proměnné A. Pokud je to nula, vypíše jí na výstup, načte další číslo které také vypíše na výstup (vlastně ho vyhodí z fronty) a ukončí se, takže se program vrátí tam, odkud jsi Jonatána volal. To může být buď hlavní program nebo předchozí Jonatán!
Jenže pokud to nula není, tak se načte další číslo a testuje, jestli je menší než 6. Pokud ano, vypíše se na výstup, potom se zavolá další Jonatán, a až skončí, to číslo se znovu vypíše na výstup a Jonatán skončí. Nezapomeň že každý Jonatán má vlastní proměnnou A, takže ten předchozí si stále pamatuje to co tam bylo načtené.
Ale když to číslo není menší než 6, tak se úplně ignoruje, rovnou se zavolá další Jonatán, a po jeho skončení se načte a vypíše další číslo v pořadí, čili se také vyhodí z fronty bez nějakého testování. Potom tenhle Jonatán skončí.

Máš to řešit v nějakém konkrétním jazyce nebo obecně, a procházíš to jen ručně?

Re: Řešení rekurze + vysvětlení?

Napsal: 22 lis 2013 20:00
od Widlajz
Ahoj,

díky za menší vysvětlení, cca. ten postup chápu. Řeším to obecně co prostě tenhle strukturogram vypíše na výstupu a procházím to pouze ručně.
Můžeš, to prosím tě zkusit vypočítat co vyjde na výstupu? Podle mého výpočtu, to nevychází, když se podívám do řešení.

Není mi zrovna jasné to, co se děje, když je A=0 tak jí vypíšu a následně místo tý nuly do "zásobníku" přepíšu dalším číslem? Tady ty rekurze s tím, PIŠ A na prvním místem a následném ČTI A mi dělají problém.

Re: Řešení rekurze + vysvětlení?

Napsal: 22 lis 2013 22:32
od faraon
Když načteš do A další hodnotu, tak se prostě ta předchozí ztratí. Ale pouze ta lokální, v každém zavolání Jonatána, a ty předchozí zůstanou beze změny. Udělej si tabulku se sloupcem pro každé vnoření, a zapisuj si stav:

Kód: Vybrat vše

vstup| A1 | A2 | A3 | A4 | A5 | A6 |
  6  |  6 |    |    |    |    |    | =0 ne
  1  |  1 |    |    |    |    |    | <6 ano
  5  |    |  5 |    |    |    |    | =0 ne
  3  |    |  3 |    |    |    |    | <6 ano
  7  |    |    |  7 |    |    |    | =0 ne
  8  |    |    |  8 |    |    |    | <6 ne
  8  |    |    |    |  8 |    |    |

A tak dále, těch vnoření je při téhle sekvenci šest a poslední čtyři čísla na vstupu zůstanou nevyužita. Mohl bys tam také přidat ještě sloupec pro výstup, abys poznal ve kterém okamžiku se obsah A vypíše, první polovina výstupu bude vypadat takhle:
1 3 0 2 0 7 . . . . .

Možná by stálo za to překreslit ten sktruktogram do vývojového diagramu, třeba by se ti v něm lépe orientovalo. On už ten název "flowchart" trochu napovídá o čem v tom jde ;-)

Re: Řešení rekurze + vysvětlení?  Vyřešeno

Napsal: 22 lis 2013 22:42
od Widlajz
Díky, vypadá to, že mi to kamarád vysvětlil dostatečně a nemám problém to vypočítat.

Díky ještě jednou.