Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

rekurzija u programskom jeziku Java

[es] :: Java :: rekurzija u programskom jeziku Java

[ Pregleda: 6407 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Jovan86
Jovan Aleksic

Član broj: 173887
Poruke: 10
*.dynamic.panet.co.yu.



Profil

icon rekurzija u programskom jeziku Java05.09.2008. u 16:14 - pre 190 meseci
Da li neko moze najjednostavnije da mi objasni rekurziju za sledeci program.Pasce mi slican na ispitu pa bih hteo da znam kako da ga resim, i kako racunam koliko puta se pozvao metod m? hvala i

pozz.



Code:

class A public int m(int i)  {

if (i<=1) return i;
return m(i-1) + 2*m(i-3);
}
}

//Pozivanje rekurzivnog metoda

A a=new A();
int i=a.m(6);

//i=?

Koliko puta se pozvao metod m?


[Ovu poruku je menjao Jovan86 dana 05.09.2008. u 17:25 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: rekurzija u programskom jeziku Java05.09.2008. u 16:25 - pre 190 meseci
Ti mora da idesh u Visoku ICT... :D

Evo ovako, kad preko ove linije koda: int i=a.m(6); pozovesh taj metod, ti mu prosledjujesh, u tom sluchaju, broj 6. Ovaj if sigurno nece proci, jer 6 nije manje ili jednako 1, pa ce se "otici" na ovaj donji return. Njega sada treba da posmatrash kao da imash dva zasebna dela: prvi je m(i-1), odnosno u ovom sluchaju m(5), i 2*m(i-3) odnosno 2*m(3). Sad se opet za ovaj prvi deo ulazi u taj metod, ali ovoga puta kao argument mu se prosledjuje broj 5. Opet nece proci uslov, i uci ce se u donji return, i tu opet dolazi na grananje u dva dela: m(5) i 2*m(2). Ovaj drugi deo ce da vrati ovo: m(2) + 2*m(0), i sad imash ovako neshto: m(5) + 2*m(2) + m(2) + 2*m(0). Ovaj poslednji ce da "udje" u ovaj prvi return, i vratice broj 1, tako da sada imash m(5) + 2*m(2) + m(2) + 1. Sad valjda znash i sam kako ide dalje, chista matematika... :)
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: rekurzija u programskom jeziku Java05.09.2008. u 17:31 - pre 190 meseci
Evo sad ceo postupak:

m(6) =
m(5) + 2*m(3) =
m(4) + 2*m(2) + 2*(m(2) + 2*m(0)) =
m(3) + 2*m(1) + 2*(m(1) + 2*m(-1)) + 2*(m(1) + 2*m(-1) + 0)) =
m(2) + 2*m(0) + 2 + 2*(1 - 2) + 2*(1 - 2 + 0) =
m(1) + 2*m(-1) + 0 + 2 - 2 - 2 =
1 - 2 + 2 - 2 - 2 =
-3

Rezultat je -3, a metod m() se poziva ukupno 17 puta.
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java15.08.2009. u 12:37 - pre 178 meseci
mene buni ovo

class A public int m(int i) {

if (i<=1) return 2;
return m(i-2) + 2*m(i-3)+1;
}
}

//Pozivanje rekurzivnog metoda

A a=new A();
int i=a.m(6);

//i=?
Sta da radim sa ovim return 2-tj da li utice na grananje???







a i ovaj...


class A public int m(int i) {

if (i>2) ;
return 2*m(i-1) + m(i-2)+2;
else
return 0;
}
}

//Pozivanje rekurzivnog metoda

A a=new A();
int i=a.m(5);

//i=?


Objasnite mi molim Vas da li if (i>2) znaci da grananje ide do m(2) i da svaki od njih vrati 1 ili sam ja to sve pogresno shvatila? I ova 2 sto mnozi m da li iznova mnozi ceo red kad zadajem za m=4?


Pazi kome zavidis!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: rekurzija u programskom jeziku Java15.08.2009. u 13:37 - pre 178 meseci
Samo treba da čitaš kod, ništa više... Znam da ti to spremaš za ispit, al' nemoj napamet da učiš taj postupak.

Ova linija koda, startuje celu priču:
Code:
int i = a.m(6);

Poziva se metod m(), i kao argument mu se prosleđuje 6. I sad čitaj kod tog metoda... Prvo ide if koji pita da li je i, odnosno, taj prosleđen parametar manji ili jednak 1. Mi smo prosledili 6, tako da taj uslov neće biti ispunjen, pa se neće ni ući u taj if, već se ide na tu sledeću liniju koda. E sad idemo na return... U njemu idu dva rekurzivna poziva ovoj istoj f-ji. Prvi će pozvati f-ju sa prosleđenim argumentom 4 (to je ovo i-2), a drugi sa argumetom 3 (i-3). I sad, za taj prvi poziv- m(4), opet se ulazi u metod m(), i opet ide ista priča: da li je i <= 1, nije, ide se na ovaj donji return, i opet idu dva rekurzivna poziva, sa argumentima 2 i 1 (pošto smo u ovom pozivu prosledili 4 kao argument), itd., itd.

Možda je najbolje da opet slikovito objasnim ceo postupak:

m(6) =
m(4) + 2*m(3) + 1 =
m(2) + 2*m(1) + 2*(m(1) + 2*(m(0)) + 1 =
m(0) + 2*m(-1) + 2*2 + 2*(2 + 2*2) + 1 =
2 + 2*2 + 4 + 2*6 + 1 =
2 + 4 + 4 + 12 + 1 =
23

E aj' sad ti tako probaj da ispišeš taj drugi primer iz tvog post-a.
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java15.08.2009. u 21:17 - pre 178 meseci
Hvala ti puno, ne ucim napamet,ovo sam sad ukapirala sli uz tvoju pomoc.
Pazi kome zavidis!
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java16.08.2009. u 12:06 - pre 178 meseci
m(4) + 2*m(3) +1 =
m(2) + 2*m(1) + 2*(m(1) + 2*(m(0)) + 1


Samo jos jedno pitanje, ova crvena 1 se prepusuje samo na kraj ne dodaje se svaki put kad racunamo m(4) i m(3),da bude ovako nesto...
m(2) + 2*m(1)+1 + 2*(m(1) + 2*(m(0)+1) + 1 Samo me jos ovo zbunjuje?
Pazi kome zavidis!
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java16.08.2009. u 13:11 - pre 178 meseci
Ja stvarno ne umem da uradim drugi primer :(
Pazi kome zavidis!
 
Odgovor na temu

_Abraxas
myth

Član broj: 154070
Poruke: 61
*.telenor.co.yu.



Profil

icon Re: rekurzija u programskom jeziku Java16.08.2009. u 23:36 - pre 178 meseci
Code:

class A {

public int m(int i) {

        if (i > 2)
            return 2 * m(i - 1) + m(i - 2) + 2;
        else
            return 0;
    }
}
//poziv metode m()
        A a = new A();
        int i = a.m(5);


m(5)=
2*m(4) + m(3) + 2 =
2*(2*m(3) + m(2) + 2) + 2*m(2) + m(1) + 2 + 2 =
2*(2*(2*m(2)+m(1)+2) + 2*0 +2) + 2*0 + 0 + 2 + 2 =
2*(2*(2*0 + 0 + 2) + 0 + 2) + 0 + 0 + 2 + 2 =
2*(2*2+2) + 4 =
2*6 + 4 =
16

Ovako je mozda komplikovanije zbog zagrada, tako da mozda bi lakse shvatila ukoliko bi radila posebno. Na primer:
m(5) = 2 * m(4) + m(3) + 2,
pa sada vidis sta se desava kada se pozove metoda m sa parametrom i=4,
m(4) = 2*m(3) + 2*m(2) + 2,
pa sada vidimo sta se desava kada parametar i uzme vrednost 3 (za parametar 2 vraca 0)
m(3) = 2*m(2) + m(1) + 2, pa posto su povratne vrednosti od m(2) i m(1) jednake 0, znaci da m(3) vraca rezultat 2, a to implicira da m(4) vraca rezultat 6, a to dalje implicira da m(5) vraca rezultat 16.

Ovde se sadrzi i odgovor na tvoje prethodno pitanje.

 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java17.08.2009. u 19:54 - pre 178 meseci
E sad ste me zbunili, dok si ti _Abraxas-e svaki put kada si radio novo m dodavao 2 , Nikola Posa je 1 svaki put izostavio,da li je to neko pravilo ili...? Ja se stvarno trudim i hvala Vam mozda sam malo dosadna, mozda su za Vas to glupa pitanja ali moram da pitam da bih naucila a ko je dobre volje kao Vas dvoje pomocice :), zato ste valjda i tu :).
Pazi kome zavidis!
 
Odgovor na temu

_Abraxas
myth

Član broj: 154070
Poruke: 61
217.65.194.*



Profil

icon Re: rekurzija u programskom jeziku Java17.08.2009. u 23:15 - pre 178 meseci
Citat:
Nikola Poša:
Možda je najbolje da opet slikovito objasnim ceo postupak:

m(6) =
m(4) + 2*m(3) + 1 =
m(2) + 2*m(1) + 2*(m(1) + 2*(m(0)) + 1 =
m(0) + 2*m(-1) + 2*2 + 2*(2 + 2*2) + 1 =
2 + 2*2 + 4 + 2*6 + 1 =
2 + 4 + 4 + 12 + 1 =
23

E aj' sad ti tako probaj da ispišeš taj drugi primer iz tvog post-a. :)


Mislim da je Nikola pogresno uradio zadatak. Kao sto je za poziv m(6) dodavao 1, tako treba i u svakom drugom slucaju kada se udje u deo metode gde se funkcija opet rekurzivno poziva. Ukoliko je potrebno da ti uradim zadatak, nije problem (mozda zelis sama da provezbas). Napisi ovde resenje, pa cemo diskutovati.

Inace, da bi bolje shvatila rekurziju, mozda bi trebalo da malo procitas i o LIFO listama (stack). Naravno, ukoliko te ovo interesuje ne samo radi ispita. :D

[Ovu poruku je menjao _Abraxas dana 18.08.2009. u 01:02 GMT+1]
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java18.08.2009. u 18:36 - pre 178 meseci
Pokusala sam da uradim zadatak ali nisam dobijala rezultat kao Nikola, pa sam batalila. Veruj mi zanima me samo radi ispita, ne zelim za Javu ni da cujem. Uradicu zadatak i napisati resenje po mom...pa dajte ocenu.
Pazi kome zavidis!
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
195.252.70.*



Profil

icon Re: rekurzija u programskom jeziku Java18.08.2009. u 23:38 - pre 178 meseci
m(6)
m(4)+2*m(3)+1
m(2)+2*m(1)+1+2*(m(1)+2*m(0)+1)+1
m(0)+2*m(-1)+1+2*2+1+2(2+2*2+1)+1
2+2*2+6+2*7+1=27

i m se poziva 9 puta

Jel tacno ili ne?
Pazi kome zavidis!
 
Odgovor na temu

_Abraxas
myth

Član broj: 154070
Poruke: 61
*.wm.rs.



Profil

icon Re: rekurzija u programskom jeziku Java19.08.2009. u 09:06 - pre 178 meseci
Jeste, tako je. :)

Srecno na ispitu. :D
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
212.200.176.*



Profil

icon Re: rekurzija u programskom jeziku Java20.08.2009. u 18:44 - pre 178 meseci
extra bas sam srecna sto sam ubola resenje :) definitivno sam dobro ukapirala posto sam ga brzo resila. Hvala Vam obojici na pomoci! I ja se nadam da cu poloziti :D
Pazi kome zavidis!
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
212.200.177.*



Profil

icon Re: rekurzija u programskom jeziku Java24.08.2009. u 20:01 - pre 178 meseci
Znam da ovo nije rekurzija ali se nadam da nadlezni nece zameriti..tacnije radije bih predlozila da se promeni naziv teme :) pomoc studentima ICT skole da savladaju Javu!

Potrebna su mi objasnjenja za ove zadatke ako ikako mozete da mi pomognete imam ispit iz Jave pa pokusavam da naucim 
------------------------------------------------------------------------------------------------------------Posle izvrsavanju koda napisati vrednost promenljivih.
int a=4, b=1;
long c=4;
for(int i=0;i<5;i++;){
If(i>2)a-=++b;
else if (i>=3) c>>=1;
else –c;}
//a=? b=? c=?
------------------------------------------------------------------------------------------------------------
Posle izvrsavanje sledecih naredaba napisati vrednost promenljivih.
int a=2, b=3,c=3,
int x=(--a + ++b)= = ++c ? --a + c++ : --c;
//a=? c=? x=?
Kod ovog zadatka znam da je rec o trojnom operatoru i znam kako se koristi samo me zanima, ako biste mi objasnili detaljnije kako se koriste ++ i -- pre i posle a, b ili c. Malo brkam to kad staru vrednost u racunanju izraza pa da posle uvecam ili smanjim i obrnuto.

Posle izvrsavanju koda napisati vrednost promenljivih.
int a=7;b=1;
long c=3
for(int i=0;i<6++;i++){
switch
{case 1:a-=++b;
Case2: c--;break;
Default:--a;
Case 4:b++;a--;break;
Case 6:a-=3; ++b; break;}}

//a=? b=? c=?


A za ovaj zadatak mi nije jasno gde je nestalo Case 5 tj zasto se ne koristi i sta treba da znaci default tj zasto bas na tom mestu a ne na kraju.
Pomagajte!


Pazi kome zavidis!
 
Odgovor na temu

bigboss
Software developer
Novi Sad

Član broj: 167537
Poruke: 60
89.216.54.*



Profil

icon Re: rekurzija u programskom jeziku Java25.08.2009. u 10:38 - pre 178 meseci
Evo upravo na jednostavan nacin objasnjeno sta je rekurzija
http://tinyurl.com/nrwvu4

Core2Duo E8500 3.16 GHz || P5Q SE,P45,1600,DDR2 1200MHz,1 x PCIe 2.0 x16,GLAN || nVidiaN260GTX/PCI-E 2.0/620MHz/2160MHz/896MB DDRIII || KHX 4GB DDR2 1066 CL5 || WD Caviar Blue 640 GB || CM 650W RP-650-PCAA
 
Odgovor na temu

mikicca
Milna Krstic

Član broj: 148670
Poruke: 16
212.200.176.*



Profil

icon Re: rekurzija u programskom jeziku Java25.08.2009. u 20:46 - pre 178 meseci
Rekurziju sam ukapirala... hvala u svakom slucaju!
Pazi kome zavidis!
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
193.189.163.*

Sajt: b.flyingoranges.com


+117 Profil

icon Re: rekurzija u programskom jeziku Java26.08.2009. u 07:14 - pre 178 meseci
Pa ovo su ti zadaci da naucis sta rade operatori. Npr.
c>>=1;
ti pomera bitove promenljive c za jedno mesto na levo. Tako da, ako je c npr. 4, imaces binarno 100, to pomeris na levo i imaces 10, tj. 2. Ne vidim kako "ne zelis za Javu ni da cujes" a mislis da resis ovakve zadatke. Uzmi lepo knjigu ili svesku, procitaj sta radi koji operator pa napisi na papiru sta se desava sa svakom promenljivom u svakoj iteraciji. Da se razumemo, mislim da zadaci nisu trivijalni, i da moras da znas Javu vise od "samo za ispit" da bi znala da ih resis.
 
Odgovor na temu

[es] :: Java :: rekurzija u programskom jeziku Java

[ Pregleda: 6407 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.