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

Mala pomoc oko rekurzije

[es] :: Java :: Mala pomoc oko rekurzije

[ Pregleda: 2479 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miljannet
Rakita Miljan
Crvenka

Član broj: 321026
Poruke: 56
*.adsl-a-6.sezampro.rs.



+3 Profil

icon Mala pomoc oko rekurzije06.04.2015. u 13:01 - pre 110 meseci
Evo ga kod iz knjige:

Code:

class Faktorijel
{
    // Ovo je rekurzivna metoda.
    
    int fakt(int n)
    {
        System.out.println("Method: "+n);
        if(n == 1)
        {
            System.out.println("Returned: "+n);
            return 1;
        }
        else
        {
            int result = n* fakt(n-1);
            
            System.out.println("Result: "+result+" fakt("+n+"-1)");
            
            return result;
        }
    }
}

public class Rekurzija 
{
    public static void main(String[] args) 
    {
        Faktorijel f = new Faktorijel();
        
        System.out.println("Faktorijel broja 5 je: "+f.fakt(5));
    }
}


Output:
Method: 5
Method: 4
Method: 3
Method: 2
Method: 1
Returned: 1
Result: 2 fakt(2-1)
Result: 6 fakt(3-1)
Result: 24 fakt(4-1)
Result: 120 fakt(5-1)
Faktorijel broja 5 je: 120

1.
Malo me buni ova lokalna promenljiva result. Evo kako sam je ja razumeo
Kada se dodje do ovog dela:

int result = n* fakt(n-1);

Promenljiva result dobija vrednost :

int result = 5 * fakt(5 - 1) => 4* fakt(4 - 1) => 3* fakt(3 - 1) => 2 * fakt(2 - 1);

2 * fakt(2-1) = 2 * 1 = 2

3 * fakt(3-1) = 3 * 2 = 6 // Kada se ovo racuna fakt(3-1) > fakt(2-1)

4 * fakt(4-1) = 4 * 6 = 24 // Kada se ovo racuna fakt(4-1) > fakt(3-1) > fakt(2-1)

5 * fakt(5-1) = 5 * 24 = 120 // Kada se ovo racuna fakt(5-1) > fakt(4-1) > fakt(3-1) > fakt(2-1)

Sto se veci broj n to se sve vrti ova metoda dublje i dublje ?

 
Odgovor na temu

nekicneko99
Programer - ucenik
ETS Mihajlo Pupin
Novi Sad Srbija

Član broj: 323579
Poruke: 108
*.dynamic.sbb.rs.



Profil

icon Re: Mala pomoc oko rekurzije06.04.2015. u 14:42 - pre 110 meseci
Faktorijal se u matematici racuna:

5! = 5 * 4 * 3 * 2 * 1

ti ovde u stvai pravis rekurzivnu finkciju (funkcija koja poziva samu seba)

Code:

        if(n == 1)
        {
            System.out.println("Returned: "+n);
            return 1;
        }


u ovom delu proveravas da li si dosao do kraja (dali je n == 1), posto ako jeste faktorijal broja 1 je 1 i onda vrate tu vrednost (return 1;)

Code:

int result = n* fakt(n-1);
            
System.out.println("Result: "+result+" fakt("+n+"-1)");
            
return result;


tu ustvari, ako n nije 1 (n != 1) "racunaj" faktorijal, tj. funkcija brojem n mnozi faktorijal broja n - 1 i to cuva u promenjivoj result.

tok izvrsavanja izgleda ovako:


pozoves funkciju:
fakt(5);

funkcija radi sledece:
5 * fakt(4);

funckija fakt(4) racuna:
4 * fakt(3);

dalje fakt(3) racuna:
3 * fakt(2);

fakt(2):
2 * fakt(1);

fakt(1); vrace 1;
onda fakt(2) vraca 2 * 1;
fakt(3) vraca 3 * 2;
fakt(4) vraca 4 * 6;
fatk(5) vraca 5 * 24 sto je 125



Nadam se da si razueo, nisam bas najbolje objasnio. Verovatno ces bolje objasnjeno naci u knjizi.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
95.180.99.*



+62 Profil

icon Re: Mala pomoc oko rekurzije06.04.2015. u 21:43 - pre 110 meseci
Stavi breakpoints na ove dve linije:

Code:

    return 1;


i

Code:

    int result = n* fakt(n-1);


Kad dodjes do breakpoint-a (bilo kog) nastavi sa 'step by step' i posmatraj kako ide tok programa; i razumeces sta se desava.

Pozz
 
Odgovor na temu

[es] :: Java :: Mala pomoc oko rekurzije

[ Pregleda: 2479 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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