gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: eb83afc)
raw | patch | inline | side by side (parent: eb83afc)
author | Doni Pracner <quinnuendo@gmail.com> | |
Mon, 25 May 2015 15:35:31 +0000 (17:35 +0200) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Mon, 25 May 2015 15:35:31 +0000 (17:35 +0200) |
kodovi/simulacija-rekurzije/algoritam.txt | [new file with mode: 0644] | patch | blob |
diff --git a/kodovi/simulacija-rekurzije/algoritam.txt b/kodovi/simulacija-rekurzije/algoritam.txt
--- /dev/null
@@ -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<InfoTip> 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