Pomoć, C++, rekurzija

poruka: 6
|
čitano: 8.128
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Pomoć, C++, rekurzija
pitanje

Napisati program koji će empirijski prebrojati koliko se puta može jednostavna funkcija ( povratni tip void, prazna definicija ) pozvati rekuzivno.Dobiveni ekspirementalni rezultat ispisati na ekran i završiti program.

 
0 0 hvala 0
15 godina
neaktivan
offline
RE: Pomoć, C++, rekurzija

Errr, vrlo cudan zadatak. Ono sto je sigurno je da to ne mozes rijesiti rekurzijom (IMHO, no opet ja nisam programer) jer rekurzija predaje parametar sljedecem pozivu.

 

Ja bi se na tvom mjestu pravio glup i rijesio problem na banalan način. Kreiraj neku varijablu count=0 i inicijaliziraj pointer na nju. U funkciju samo stavi uvećavanje podatka di pokazuje pointer. Tko god ti je to zadao ima za cilj da naucite da stog nije beskonacan :) Imas na netu točan ANSI C opis sto se stavlja na stog kad se poziva funkcija. Ne sjecam se previse toga no definitivno ide povratna adresa (4Byte-a)

 

Pozdrav od NEProgramera.

15 godina
neaktivan
offline
RE: Pomoć, C++, rekurzija
autorov komentar

istina zadatak je čudan, da imislo sam na slično rješenje, a istina znam da ovdje ima pametnih ljudi i dobrih odgovora, pa stoga i postavih taj zadatak ovdje

15 godina
neaktivan
offline
RE: Pomoć, C++, rekurzija

 

 

Ne znam ,možda ovako....;

#include <iostream>

using namespace std;

void rekurzija ( int brojac )
{
    // svaki poziv se broji
  cout<< brojac <<"\n";  
  rekurzija ( brojac + 1 );
}

int main()
{
  rekurzija ( 1 ); //prvi poziv ,od jedan       
}
//Program se rusi naravno ali ti pokazuje broj poziva
//funkcija je tipa void

Naravno da ovakvo programiranje je loše i da samo dokazuje da je sama rekurzija bez uvjeta opasna...jer kod nekih kompajlera može izazvati
reset(na taj način prekinuti program).
Onaj tko ti je dao taj zdatak valjda ima i to u cilju...dokazivanje ograničene uporabe rekurzija u npr. matematici...fibonacci,faktorijel itd;
Oni se tako mogu lijepo riješiti  pomoću rekurzije.
Može se dosta pisati o tome i kako to nije dobro naravno za memoriju...stvaraju se kopije svakim pozivom i slični problemi....





Private
Poruka je uređivana zadnji put pon 5.1.2009 23:03 (Private).
15 godina
neaktivan
offline
RE: Pomoć, C++, rekurzija

Ne :) Jel ti lijepo pise da ne smijes predavati nikakve parametre. Ovako ce se pozvati osjetno manje puta jer se i to stavlja na stog

15 godina
protjeran
offline
Pomoć, C++, rekurzija

Ovaj zadatak je puno lukaviji nego što mislite i vjerujem da bi čak dosta profesionalnih programera na njemu "polomili zube".

 

Prvo, rekurziju treba prisiliti da uzastopnim pozivima napuni Stog, nakon čega se generira StackOverflow exception. Znači, trik zadatka je zapravo da se vidi da li znate uhvatiti exception ovog tipa. Štoviše, fora je u tome što će većina tu iznimku pokušati hvatati na klasični try-catch način, i tu se zapravo vidi tko zna, a tko ne zna programirati, jer ovdje nije riječ o običnim C++ iznimkama već o SEH-u (Structured Exception Handling). Svi pokušaji da se ova iznimka uhvati na klasičan način će biti uzaludni, no ovdje se nije nitko sjetio niti da na taj način pokuša...

 

Pa evo rješenja:

 

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

int n = 0;

void f(){
    n++;
    f();
}
int main(int argc, char* argv[])
{
    __try{
         f();
    }
    __except(GetExceptionCode() == EXCEPTION_STACK_OVERFLOW
    ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
    {
        cout << n;
    }
    cin.get();
    return 0;
}

 

 

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