Napisati rekurzivnu i iterativnu funkciju

poruka: 4
|
čitano: 5.250
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
neaktivan
offline
Pomoc. HITNO! Program.
Ovako, treba mi hitno da mi neko ko je spsoban uradi sljedeci zadatak, da napise kod u bilo kojem programskom jeziku (moze u C) i da prokomentarise svaku liniju koda. Zadatak glasi:

Napisati rekurzivnu i iterativnu funkciju koja računa faktorijal cijelog broja. Ispisati rezultat.

Hvala unaprijed svima.
 
0 0 hvala 0
13 godina
neaktivan
offline
Napisati rekurzivnu i iterativnu funkciju

To je osnovni primjer rekurzije koji se može naći na milijun mjesta na netu. Potraži.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
0 0 hvala 0
14 godina
offline
Napisati rekurzivnu i iterativnu funkciju

Faktorijela nekog pozitivnog cijeloga broja ti je umnozak svih brojeva izmedu jedan i toga broja. Oznacava se tako da poslije broja stavis usklicnik, pa je tako faktorijelu od broja x pisemo x! .

x! = 1*2*... * x

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

3! = 1 * 2 * 3 = 6

 

I jos je definirano da je 0! = 1, a faktorijele od negativnih brojeva ne postoje.

 

Sada cemo napisati funkciju za racunanje faktorijele nekoga cijeloga broja. Nazvat cemo je faktorijela, i jedini argument koji ce primati ce biti broj od kojeg racunamo faktorijelu. Dakle njezin potpis ce izgledati ovako:

 

long faktorijela(int broj);

 

Faktorijelu nekoga broja mozemo izracunati na vise nacina. Jedan nacin je iterativni, tj. da pomocu jednostavne for petlje mnozimo sve brojeve od 1 do broja. To bi ovako izgledalo:

long faktorijela(int broj){

    int rezultat = 1, i;

    for(i = 1; i <= broj; i++){

        rezultat *= i;

    }

    return rezultat;

}

 

Drugi nacin je da to promatramo kao rekurzivnu funkciju. To se temelji na tome da faktorijelu nekoga broja x mozemo napisati i ovako: x! = x * (x-1)!. Npr.

50! = 50 * 49!

49! = 49 * 48!

48! = 48 * 47!

I tako sve dok ne dodemo do nula rekurzija prestaje jer znamo da je 0! = 1. Dakle u nasem slucaju to pisemo ovako:

 

long faktorijela(int broj){

    if(broj == 0)

        return 1;

    else

        return (broj * faktorijela(broj-1));

}

 

U praksi se oba nacina svode na isto, no razlika je u tome sto je drugi nacin lakse napisati(ako koristis ternarni operator moze se cak i u jednome redu napisati). I u drugom nacinu ima puno vise poziva funkcija nego u prvome gdje imas samo jedan poziv funkcije. Ne znam koliko to utjece na perfomanse, no znam da to moze pri vecim brojevima napuniti stack   i uzrokovati  stack overflow gresku.

Poruka je uređivana zadnji put pet 8.2.2013 19:01 (captain_soap_McTawish).
 
4 0 hvala 1
11 godina
neaktivan
offline
Re: Napisati rekurzivnu i iterativnu funkciju
Svaka cast. Hvala puno. Profesionalno :D
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice