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