[ SuperC @ 30.11.2006. 19:14 ] @
Code:
#include <iostream.h>
int f(int i) {
if (i)
return f(i/10)*(i%10);
else
return 1;
}

int main () {
cout << f(123);
return 0;
}


Eh, sada, Program pocinje da se izvrsava od int main (), zatim sta?
Imam vrijednost f(123), koju bi normalno uvrstio gore u int f, ali ovdje je cout (character out) i nije postavljeno gore kao niz, nego kao cjelobrojna vrijednost.
i ono sto me najvise buni je linija return f(i/10)*(i%10);
---------------------------------------------------------
Kako je ovdje (u ovom zadatku) rjesenje 6??

Pitanje 2:

ili evo bolje pitanje:

u primjeru:

Citat:
void rek(int i) {
cout << i%3;
if (i<5) rek (i+1);
cout << i%10;
}
int main () {
rek (1);
}



mi je jasno da na pocetku i=1, te je 1%3=1 (prva cifra)

onda je i+1=2 sto daje 2%3= 2 (druga cifra)

onda je i=3 i sa 3%3 daje 0 (treca cifra)
i ide na 4 4%3 sto da je 1 (cetvrta cifra)
4 je jos uvijek manje od 5 (i<5) i onda se i inkrementira na 5 i ide se na

cout << i%10; sto daje 5%10=5

i do sada imam kao rjesenje 120125


ja bih normalno zavrsio ovdje program jer je sve izvrseno, no u rjesenje kaze da su ove cifre tacne, no da slijede jos 4321

Pitanje:
zasto se sada vrijednost i=5 (trenutno) dekrementira do 1 (sto je bila pocetna vrijednost)?
[ DjoleReject @ 30.11.2006. 20:12 ] @
Ko rece na nekoj temi da je ucenje rekurzije pitanje trenutka kad shvatis - dok ne kontas, ne kontas, kad shvatis, ne znas staje bilo problem...

Posto pitas ZASTO je rezultat takav kakav je, evo ti zgodno resenje:

Ubaci u funkciju sledecu stvar -
Code:

void rek(int i){
    cout<<i<<"\t";
//sad stavis sav kod koji dalje radi posao
}


Kada iz main-a zoves rek funkciju pocni da joj saljes manje brojeve, pa ka vecima i posmatraj sta se ispisuje. Ja zaista ne znam kako jos da ti pomognem, rekurzije ces mozda shvatiti najlakse sa faktorijelom i postavljanjem ovog ispisivanja u svakoj turi.
[ SuperC @ 30.11.2006. 20:25 ] @
nisi shvatio (ne treba mi kod nego pojasnjenje sta bude kada dodje do uslova), recimo u drugom primjeru nakon broja 5 (tu je uslov da i<5), sta se desava, da li onda vrijednost i ide unazad do 1, koliko sam primijetio da, kada se uslov izvrsi onda se vrsi povrat, da li je ovdje sada u pitanju da uzmem ponov 4, pa 3 pa 2 pa 1?
[ SuperC @ 30.11.2006. 20:34 ] @
ili recimo meni jos ludji primjer:

Code:
#include<iostream.h>

int rek(int i) {
double s=0.9;
if (i)
s+= rek (i/10)+i%10;
return int (s+0.5);
}
int main () {
cout << rek (1234);
}


i sada je ovo zadatak sa testa. Ok.

Ja krenem ovako

Funkcija pocinje gdje je main () da se izvrsava.
znaci rek(1234) ide u rek (int i)

imam uslov if (1234) (!!bitno da li kod ovakvih if gdje stoji jedan broj, sto je meni najludje da shvatim, proed svih knjiga nijedna to ne objasnjava na primjeru, nego to je uslov (uslov cega!!), da li po ovome znam da je rekurzija vec u pitanjU??)

i sada s+= mogu pisati i kao s=s+ ______________ (ovo ostalo racunam prvo: rek (1234/10)+i%10, da li ovdje sada kazem 123+4, pa onda dodam 0,9 ili

opet ista linija

Code:
s=+ rek(i/10)+i%10


----------------

ovaj modulo je ok, jednom imam vrijednost 4, drugi put 3, treci 2 i na kraju 1.


Kako god da okrenem nikako da postignem rjesenje koje mi nudi. Gdje grijesim?

[Ovu poruku je menjao SuperC dana 30.11.2006. u 21:49 GMT+1]