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

Rekurzija...nejasan primjer

[es] :: C/C++ programiranje :: C/C++ za početnike :: Rekurzija...nejasan primjer

[ Pregleda: 1692 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

d_coverdale
Rime Ninaculjk

Član broj: 148492
Poruke: 30
80.71.145.*



Profil

icon Rekurzija...nejasan primjer06.03.2008. u 15:13 - pre 195 meseci
ee pozdravljam ljudi....
evo patim se i mucim s rekurzijom...tek shto mislim da sam shvatio pojavi se neki primjer koji ne kontam...kao npr. slijedeci:

Code:
#include <iostream> 
using namespace std; 
void prikaziUnazad()

    char znak; 
    cin>>znak; 
    if(znak!='.')
    { 
        prikaziUnazad(); 
        cout<<znak;
    } 
    else
    { 
        cout<<"\nObrnutim redosljedom ste unijeli: "; 
    } 
}
void main()

    cout<<"\t\t::REKURZIJA::\n\n"; 
    cout<<"Unesite vas tekst: ";
    prikaziUnazad(); 
}


Tekst zadatka glasi :
Koristeći rekurziju, napisati program koji korisniku omogućava da unese željeni tekst. Uslov za završetak programa je da uneseni tekst sadrži najmanje jednu tačku (.). Nakon unosa, program treba obrnutim redosljedom ispisati sve znakove koji su uneseni do prvog znaka tačke.

eh posto je najlakse krenuti shta mi je jasno....dakle...jasno mi je to da on krene provjeravati znakove iz buffera i ako znak nije tacka ponovo poziva funkciju...i tu nastaju problemi u mojoj glavi :D. Dakle on ponovo poziva istu funkciju u logika je da je krece od pocetka...eh zasto mi ponovo onda ne nudi da unosim karaktere....zbog onoga cin>>znak; ???? eh dalje...pretpostavljam da to 'nekako' radi....eh kada dodje do znaka '.' preskace if i ide na else...eh tu nastaju zestoki problemi u mojoj glavi...kako to da on u tome else ispise obrnuto...ustvari kako uopste ispise obrnuto??...mislim znam da svaka 'kopija' funkcije zauzima mjesto na stacku i kada se stack prazni (a posto je stack LIFO) treba da se ispisuje posljednji...to je ono u mojoj glavi kako sam zamislio...ali kako ispisuje kada on nije nijednom uradio cout??? jer kad pogledamo on je ulazio u if uslov i samo izvrsavao prvu liniju koda u uslovu, odnosno rekurziju (prikaziUnazad();)...dakle nije nijedno izvrsio cout<<znak; jer je s znakom '.' odmah otisao na else :S:S:S :D:D:D
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Rekurzija...nejasan primjer06.03.2008. u 16:21 - pre 195 meseci
Kad korisnik unese tačku, funkcija se završava i izvršavanje se vraća u funkciju koja je pozvala (opet ista funkcija) i ona će ispisati pretposlednji karakter koji je korisnik uneo, završiti se i vratiti dalje.
 
Odgovor na temu

Linux_FreeBSD
student
Mostar

Član broj: 43101
Poruke: 29
89.146.169.*

Sajt: www.dernek.ba


Profil

icon Re: Rekurzija...nejasan primjer04.04.2008. u 11:36 - pre 194 meseci
imas uslov da dok je unos razlicit od tacke ( if znak != "." ) rekurzivna funkcija poziva samu sebe i stavlja (upisuje) na LIFO(last in first out)stek znakove koje si upisao (komanda "cout<<znak;") , i onda kad uneses tacku znaci da prekidas poziv funkcije , tj. uslov vise nije ispunjen i onda slijedi ovo pod "else" tj. ispis svih znakova, a posto je rijec o LIFO stack-u onda se normalno zadnji uneseni clan ispisuje prvi i znaci uneseni text ce biti ispisan naopako/obrnuto .... sa steka se uzima zadnji uneseni elemenat i ispisuje se prvi , i sve tako od vrha prema dnu steka se vrsi ispis (za svaki znak postoji nova "lokacija" unutar steka) ....
.... bolje ic' u kurvaluk biciklom, nego Mercedesom na posao ....
===============================================
 
Odgovor na temu

boskicthebrain
Boško Stupar
programer, DMS Group Novi Sad
Novi Sad

Član broj: 178573
Poruke: 20
82.117.201.*



Profil

icon Re: Rekurzija...nejasan primjer14.04.2008. u 18:35 - pre 194 meseci
Probaj da nacrtas graf rekurzivnih poziva funkcije. Mislim da ce ti biti jasnije. Fazon je u tome sto se prvo rekurzivno poziva funkcija pa se tek onda ispisuje znak.

To se ponavlja sve dok ne stigne do tacke. Tu se prestaje sa rekurzivnim pozivima i prvi put se nesto ispisuje a to je ono u 'else' bloku.
Zatim krece povratak kroz graf poziva. Znaci, zavrsavaju se sve pozvane funkcije i uz put svaka ispisuje karakter na koji je naisla pri samom pozivu.

Npr:

Rekurzija.


ulazak u rekurzije (ovde funkcija samo dobavi karakter ali nista ne ispisuje):

Code:

R
   e
       k
           u
               r
                   z
                       i
                          j
                             a
                                 .

Prvi ispis:
"Tekst u obrnutom redosledu:"

I sad sledi povratak iz rekurzija i ispis karaktera:
Code:

                             a
                          j
                       i
                   z
               r
           u
       k
   e
R

Ispis:

ajizrukeR

ako vec ne programiras, onda trci ili tako nesto...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Rekurzija...nejasan primjer

[ Pregleda: 1692 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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