Rekurzija

poruka: 7
|
čitano: 4.681
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Rekurzija

Ovo bi trebala biti rekurzija pa me zanima dali je dobro?

Uglavnom funkcija odbrojava od zadanog broja prema nuli, znam da se to moglo i drukčije riješiti ali ovo je samo proba bila, ništa više.

 

#include <iostream>
#include <stdlib.h>
using namespace std;

void rekurzija (int broj)

    broj -= 1;
    cout << broj << endl;
    if(broj!=0) {rekurzija(broj);}
}

int main()
{
    rekurzija(4500);
    system("Pause");
    return 0;
}

Poruka je uređivana zadnji put pet 30.12.2011 4:30 (NiGHT_RiDER92).
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Rekurzija

cini se dobro.

14 godina
neaktivan
offline
Re: Rekurzija

Možeš i ovako:

 

void rekurzija (int broj){
    if(broj < 0) return;
    cout << broj << endl;
    rekurzija(broj-1);
}

 

Rekurzija uvijek mora imati uvjet završetka pa ga je poželjno posebno naglasiti, dok umanjenje varijable broj možeš predati i u sljedećem pozivu funkcije.

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put pet 30.12.2011 12:26 (TracerCPP).
17 godina
offline
Rekurzija

Bah, pretekao si me za 2 sekunde, baš mi smješno{#}

 

kao što reče tracer, svaka rekurzija ima dvije stvari:

- uvjet prekida

- rekurzivni poziv

 

Za onaj prvi kod, mislim da nije rekurzivni, kako skida sa stoga bez returna, tamo su se nagomilale funkcije na stog, nigdje prekida za skidanje,

samo se pozivi funkcija koriste u svrhu iteracije.

Poruka je uređivana zadnji put pet 30.12.2011 12:41 (Floki).
 
1 0 hvala 0
14 godina
neaktivan
offline
Re: Rekurzija

Rekurzivni je - funkcija poziva samu sebe. Base pointer i stack pointer kontroliraju stanje na stog-u pa kad funkcija završi s radom (kada se ispuni uvjet završetka rekurzije) uništavaju se lokalne varijable svakog pojedinog međupoziva i smanjuje se pokazivač na vrh stog-a.

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put pet 30.12.2011 12:42 (TracerCPP).
17 godina
offline
Rekurzija

Ne dvojim da si u pravu, međutim ovako gubi nit i svrhu rekurzije, da skidanjem elemenata sa stoga vrši izračune, pošto ubacuje iteraciju varijable posebno,

na način kako se radi u while petlji, međutim to je potpuno druga stvar, ovo što je napisao je zamka, mješanje rekurzije i iteracije, kod ispisa brojeva može proći,

međutim kod računanja npr. faktor jel - nikako.

 

Krajnji cilj je shvatiti ovo:

int factorial(int n) {
 
     //Return 1 when n is 0
     if ( n == 0 ) return 1;
 
     //factorial(n) = n * factorial(n-1);
     return n * factorial(n-1);
}

A ovo je moguće jer do izračuna dolazimo skidanjem sa stoga vrijednosti n*factorial(n-1) funkcija koje smo prethodno pozvali, a pozivanje funkcija prekidamo čim dobijemo poznatu povratnu vrijednost, odnosno za n=0 povratna vrijednost je 1, onda slijedi skidanje, donja funkcija na stogu sada ima poznatu povratnu vrijednost jer nam je poznata povratna vrijednost funkcije koja je iznad nje na stogu.

 

U suštini ništa mistično, samo LIFO karakteristiku stoga (zadnji unutra, prvi van) iskoristimo za matematički izračun (što je bilo prvo, stog ili matematika, ovisi o gledanju, matematičari će reći da sve polazi od njih{#}).

Poruka je uređivana zadnji put pet 30.12.2011 13:27 (Floki).
 
1 0 hvala 0
15 godina
neaktivan
offline
Rekurzija

Hvala na pomoci, samo sam htio provjeriti dali sam ispravno napravio to. :)

Moj PC  
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice