Citat:
Neutrino kaže:
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
|
Duhovito i lako se pamti.
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;
}
Funkcija "a" se poziva 4 puta, prvi put je mi pozivamo (sa 1) i jos 3 puta rekurzivno (sa 6, 16, 36). Kada je pozvana sa 36, "if" uslov je ispunjen, vracamo vrednost, ali gde? U "treci poziv", dakle umesto "a((foo + 2) * 2)" sada imamo 36. Onda se "36 + 2" vraca u "drugi poziv", pa 40 u "prvi poziv" i na kraju on vraca 42 promenljivoj "val". Naravno, u originalu "a" vraca u "c", pa "c" vraca u "b", pa ona u "a", pa jos 2 puta tako u krug, i onda ovo postaje manje vidljivo.