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: 1a9c238)
raw | patch | inline | side by side (parent: 1a9c238)
author | Doni Pracner <quinnuendo@gmail.com> | |
Tue, 28 Nov 2017 15:06:22 +0000 (16:06 +0100) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Tue, 28 Nov 2017 15:06:22 +0000 (16:06 +0100) |
PretrazivanjeSaVracanjem/Cifre/Zad0.java | [new file with mode: 0644] | patch | blob |
PretrazivanjeSaVracanjem/Cifre/_zad0-cifre.txt | [new file with mode: 0755] | patch | blob |
diff --git a/PretrazivanjeSaVracanjem/Cifre/Zad0.java b/PretrazivanjeSaVracanjem/Cifre/Zad0.java
--- /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
--- /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