gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Simulacija rekurzije, algoritam
authorDoni Pracner <quinnuendo@gmail.com>
Mon, 25 May 2015 15:35:31 +0000 (17:35 +0200)
committerDoni 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]

diff --git a/kodovi/simulacija-rekurzije/algoritam.txt b/kodovi/simulacija-rekurzije/algoritam.txt
new file mode 100644 (file)
index 0000000..962fce4
--- /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
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner