[ PeraKojotSuperGenije @ 04.02.2007. 17:17 ] @
Pravim win32 konzolne aplikacije u VC++ 2005 i rekurzivna funkcija ne moze sama sebe da pozove vise od 3770 puta. Program puca bez javljanja greske, ali mi se cini da sam nekako uspeo da utvrdim da program puca zbog StackOverflow-a? Da li je moguce povecati stack? Ili...
[ Ivan Dimkovic @ 04.02.2007. 17:49 ] @
Ovaj, ja bih pre pogledao zasto dolazi do stack overflow-a nego sto bih povacavao stack ;)

Doduse, ako bas hoces da primenis "ruski sistem" (grubu silu) - mozes reci linkeru da ti alocira stack od, recimo, 2 GB :)
[ NrmMyth @ 04.02.2007. 18:26 ] @
postaj funkciju
[ PeraKojotSuperGenije @ 04.02.2007. 18:43 ] @
void f(int i){
if (i<5000) f(i+1);
else cout<< i;
}

funkciju f pozivam sa f(1).

Naravno nije ovo f-ja koja mi treba, ali posto sam i ja sumnjao da nesto drugo ne valja napravio sam ovu jednostavniju f-ju i ni ona ne radi. Program se jednostavno zavrsi bez prijavljivanja ikakve greske a ispisivanje broja 5000 se ne desi.

Kako da linkeru kazem da mi alocira stek od 2gb?
[ Dragi Tata @ 04.02.2007. 21:54 ] @
Koristiti rekurziju u imperativnim jezicima kao što je C++ je dobro samo kao vežba. Ne samo što dolazi do stack overflow-a (što si i sam saznao), već se i performanse degradiraju. Jednostavno, koristi iteraciju i biće sve OK.

[ NrmMyth @ 04.02.2007. 22:43 ] @
Da, StackOwerflow na i = 4795...

Kad ti se ovako nesto dogodi, "bolje" je izmjeniti algoritam nego mijenjati velicinu stacka.


Citat:
Dragi Tata: Koristiti rekurziju u imperativnim jezicima kao što je C++ je dobro samo kao vežba. Ne samo što dolazi do stack overflow-a (što si i sam saznao), već se i performanse degradiraju. Jednostavno, koristi iteraciju i biće sve OK.
Ne sjecam se da sam ikad koristio rekurziju van natjecanja.
A i "svaka" rekurzija se moze razmotati s sigurnim 'performance gain-om'. (u pravilu)
[ PeraKojotSuperGenije @ 05.02.2007. 12:16 ] @
Hvala na odgovorima!

Ja sam sve to vec znao. Spremam ispit iz algoritama. Za neke stvari trebada naucim i rekurzivne i iterativne algoritme, a kad vec ucim volim da vidim i da to radi. Za to mi treba veliki stek, pa bih molio nekoga da mi odgovori na vec postavljeno pitanje. Po mogucstvu stek bi trebao da bude dovoljno veliki da podrzi 1.000.000 rekurzivnih poziva.

Unapred hvala!
[ NastyBoy @ 05.02.2007. 13:05 ] @
http://msdn2.microsoft.com/en-gb/library/8cxs58a6(VS.80).aspx