From: Doni Pracner Date: Mon, 25 May 2015 15:35:31 +0000 (+0200) Subject: Simulacija rekurzije, algoritam X-Git-Url: https://svarog.pmf.uns.ac.rs/gitweb/?a=commitdiff_plain;h=97dc71eb88de9cccf645b47ac8791c6b62b980d4;p=spa1-materijali.git Simulacija rekurzije, algoritam --- diff --git a/kodovi/simulacija-rekurzije/algoritam.txt b/kodovi/simulacija-rekurzije/algoritam.txt new file mode 100644 index 0000000..962fce4 --- /dev/null +++ b/kodovi/simulacija-rekurzije/algoritam.txt @@ -0,0 +1,66 @@ +Prvi koraci +=========== + +- odrediti uslove za parametre koji ce napraviti trivijalne pozive +- oznaciti pozive adresama (ako ih ima vise) +- napraviti InfoTip klasu u kojoj su polja parametri, lokalne +promenljive, adresa i potencijalni dodatne "virtuelne" promenljive + + +Osnovna ideja (skica metoda za simulaciju) +========================================== + +ponavljaj { + // rekurzivni spust + dok (nijeTrivijalanSlucaj) { + // prepisujemo kod + // pamtimo na steku vrednosti parametara + } + + //trivijalan slucaj + + // povratak iz rekurzije + dok (stekNijePrazan I nemaNovogPoziva) { + // skidamo sa steka + // prepisujemo kod + } +} dok (stekNijePrazan) + + +Kod: +===== + + +InfoTip el; +Stek s = new Stek<>(); +// -tipicno ovde deklarisemo promenljive koje se koriste +// u originalnom metodu da bi bile vidljive svuda +// -ako metod vraca vrednost treba nam promenljiva +// rez odgovarajuceg tipa + +do { + while (nijeTrivijalanSlucaj) { + // -prepisati kod iz originalnog metoda + // do prvog rek poziva + // -staviti na stek lokalne promenljive, + // parametre i adresu poziva + // -postaviti parametre kao u pozivu + } + //trivijalan slucaj + // -prepisujemo originalni metod + // -umesto "return x" pisemo "rez = z" + boolean nemaPoziva = true; + while (!s.jePrazan() && nemaPoziva) { + el = s.skiniVrh(); + // -vracamo vrednosti sa steka u metod + // -u zavisnosti od adrese poziva nastavimo + // prepisivanje originalnog metoda sa + // tog mesta + // -ako se naidje na "return x" pisati "rez = x" + // -poziv metoda u dodeli zamenjujemo sa "rez" + // -ako se dodje do novog rek. poziva tada: + // -sacuvati na steku vrednosti + // -postaviti parametara kao u pozivu + // -pisemo "nemaPoziva = false;" + } +} while (!s.jePrazan()); \ No newline at end of file