|
Klijentske aplikacije (X)HTML, CSS, JavaScript, AJAX... |
|
Alatke vezane za temu | Vrste prikaza |
26.12.2015, 13:00 | #1 |
.
Član od: 2.11.2005.
Poruke: 2.532
Zahvalnice: 113
Zahvaljeno 710 puta na 498 poruka
|
Javascript - međusobno rekurzivne funkcije
Naišao sam na ovaj primer na internetu i ne mogu baš da shvatim kako radi. Console log u a() funkciji ispisuje 1,6,16 i 36 tokom 4 iteracije, a krajnji rezultat je 42. Dakle, u poslednje izvršenju funkcije a, foo je 36 (linija 5), a na liniji 6 foo dobija i 3*2 iz funkcije b.
Zašto i kako se to dešava? Ja sam očekivao da će kranji rezultat biti 36, tj. da će a() vratiti prvi rezultat veći od 20 bez obzira na sve ostalo. Kod:
var val = a(1); console.log("Krajnji rezultat: " + val); // 42 function a(foo){ console.log(foo); // 1,6,16,36 if(foo > 20) return foo; return b(foo+2); } function b(foo){ return c(foo) + 2; } function c(foo){ return a(foo*2); } |
26.12.2015, 14:25 | #2 |
Deo inventara foruma
Član od: 14.3.2008.
Lokacija: EHCPCGG
Poruke: 12.111
Zahvalnice: 4.319
Zahvaljeno 3.295 puta na 2.274 poruka
|
Re: Javascript - međusobno rekurzivne funkcije
Kod:
Inicijalno se zove a(1) > 42 (a): Zatim se zove b(3) > 42 (b): Zatim c(3) + 2 > 40 + 2 = 42 (c): Zatim a(3*2) > 40 (a): Zatim b(8) > 40 (b): Zatim c(8) + 2 > 38 + 2 = 40 (c): Zatim a(16) > 38 (a): Zatim b(18) > 38 (b): Zatim c(18) + 2 > 36 + 2 = 38 (c): Zatim a(36) > 36 |
Sledeći korisnik se zahvaljuje korisniku doctor na korisnoj poruci: | ||
nighthawk (26.12.2015) |
26.12.2015, 15:17 | #3 |
Deo inventara foruma
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
|
Re: Javascript - međusobno rekurzivne funkcije
Rekurzivne funkcije su kao seks - koliko puta uđeš toliko puta moraš i da izađeš i uvek nastavljaš tamo gde si poslednji put izašao
Doca je već lepo demonstrirao gde si napravio previd - zaboravio si da rekurzivno pozvane funkcije moraju da izađu iz svojih poziva i da svaki put kad se pozove b() prilikom vraćanja rezultata dodaje još 2. Kada skript dođe do spornog trenutka (val = 36 na liniji #6) if zaista detektuje da je foo veće od 20 i izvršava return foo; ali poenta je u tome što se kontrola izvršenja ne prebacuje na liniju #1 već na poslednju funkciju koja je pozvala a() a to je c() i tako u krug dok se ne izađe iz svih pozvanih rekurzivnih funkcija. Poslednja ispravka: Neutrino (26.12.2015 u 16:00) Razlog: ..aman hoću li konačno da ubodem format... |
Sledećih 4 korisnika se zahvaljuje korisniku Neutrino na korisnoj poruci: | ||
26.12.2015, 17:11 | #4 | |
Veteran
Član od: 5.11.2005.
Poruke: 826
Zahvalnice: 177
Zahvaljeno 199 puta na 154 poruka
|
Re: Javascript - međusobno rekurzivne funkcije
Citat:
Ajd' i ja malo da pametujem. Da bi bilo ociglednije to rekurzivno pozivanje, funkcije "b" i "c" mozemo da izbacimo iz igre. Dakle: Kod:
function a(foo){ if (foo > 20) return foo; return a((foo + 2) * 2) + 2; } |
|
Bookmarks sajtovi |
Tagovi |
javascript |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Galerija JavaScript | Teva | Web razvoj | 0 | 24.6.2012 14:57 |
Funkcije u windows.h biblioeci... | ozzytheking | Programiranje | 7 | 8.4.2012 21:52 |
JavaScript. da/ne | Game fever | Klijentske aplikacije | 1 | 10.10.2011 0:06 |
Flashplayer i Javascript, pomoć! | Lazar95 | Aplikativni softver | 5 | 13.1.2009 1:19 |