gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Pretrazivanje sa vracanjem, zadatak sa ciframa
authorDoni Pracner <quinnuendo@gmail.com>
Tue, 28 Nov 2017 15:06:22 +0000 (16:06 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Tue, 28 Nov 2017 15:06:22 +0000 (16:06 +0100)
PretrazivanjeSaVracanjem/Cifre/Zad0.java [new file with mode: 0644]
PretrazivanjeSaVracanjem/Cifre/_zad0-cifre.txt [new file with mode: 0755]

diff --git a/PretrazivanjeSaVracanjem/Cifre/Zad0.java b/PretrazivanjeSaVracanjem/Cifre/Zad0.java
new file mode 100644 (file)
index 0000000..0c9c8f2
--- /dev/null
@@ -0,0 +1,39 @@
+
+public class Zad0 {
+    static int[] broj;
+    
+    // Konstante koje omogucavaju laku promenu resenja
+    // kakva se generisu ovim programom
+    static final int MIN_CIFRA = 0;
+    static final int MAX_CIFRA = 9;
+
+    public static void main(String[] args) {
+        // napravimo niz trazene duzine
+        // sadrzaj niza zapravo nije bitan
+        broj = new int[] {MIN_CIFRA, MIN_CIFRA, MIN_CIFRA, MIN_CIFRA};
+        sastavibroj(broj, 0);
+    }
+
+    public static void sastavibroj(int[] broj, int pozicija) {
+
+       // trivijalan slucaj - dosli smo do kraja niza
+        if (pozicija >= broj.length) {
+           // imamo kompletno resenje, ispisujemo na ekran
+            for (int i: broj)
+                System.out.print(i);
+            System.out.println();
+            return;
+        }
+
+       // postavimo inicijalnu vrednost
+        broj[pozicija] = MIN_CIFRA;
+
+       // inace isprobavamo sve mogucnosti na ovoj poziciji
+        while (broj[pozicija] <= MAX_CIFRA) {
+           // probamo dalja mesta
+            sastavibroj(broj, pozicija+1);
+            broj[pozicija] = broj[pozicija]+1;
+        }
+
+    }
+}
diff --git a/PretrazivanjeSaVracanjem/Cifre/_zad0-cifre.txt b/PretrazivanjeSaVracanjem/Cifre/_zad0-cifre.txt
new file mode 100755 (executable)
index 0000000..b2f71a7
--- /dev/null
@@ -0,0 +1,53 @@
+Zadatak 0 - rekurzivno resavanje problema\r
+=========================================\r
+\r
+Napisati program koji ce na ekran da ispise sve brojeve sa 4 cifre, odnosno\r
+sve od 0000 do 9999.\r
+\r
+0000\r
+0001\r
+0002\r
+0003\r
+0004\r
+...\r
+1000\r
+1001\r
+...\r
+9998\r
+9999\r
+\r
+\r
+Problem resavati pretrazivanjem sa vracanjem, a ne direktno sa nekom\r
+petljom od 0 do 9999.\r
+\r
+\r
+Ideje\r
+-----\r
+\r
+Razmotriti kako problem opisati rekurzivno, a ne iterativno sto bi bio\r
+uobicajeni pristup.\r
+\r
+Problem nekako treba razbiti na rekurzivne delove. Ovde mozemo gledati\r
+po duzini, tj broju cifara koje treba obraditi.\r
+\r
+Na primer za sve jedncifrene brojeve je samo potrebno probati sve mogucnosti 0-9\r
+i svaki put ispisati to resenje.\r
+\r
+Za dve cifre je potrebno probati sve mogucnosti za tu drugu poziciju (0-9) i za\r
+svaku od tih mogucnosti probati sve mogucnosti za jednu cifru.\r
+\r
+Odnosno za bilo koji broj cifara, treba da isprobavamo jednu koju trenutno\r
+gledamo, i za svaku od tih mogucnosti generisanje svih resenja sa manjim\r
+brojem cifara.\r
+\r
+Kod rekurzivnog resavanja problema je uvek neophodno definisati "trivijalne"\r
+izlaze, tj izvrsavanja metoda u kojima nece biti novih rekurzivnih poziva.\r
+Bitno je da se ceo postupak u nekom momentu zavrsi.\r
+\r
+Kod ovog resavanja se to tipicno resava tako sto se rekurzivno uvek ide na\r
+jednu stranu (s leva na desno, ili s desna na levo), a trivijalni pozivi su\r
+kad se stigne na kraj niza ili "ispadne" iz njega (skroz desno, tj skroz\r
+levo).\r
+\r
+Povratak unazad se desava pri povratku iz rekurzije, a ne eksplicitnim\r
+pozivima.
\ No newline at end of file
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner