A probléma a következő: van egy függvény, aminek egy vektor a visszatérési értéke:
vector<string> fuggveny (string input)
{
vector<string> visszateres;
//Dolgok, visszateres.push_back("valami");
return visszateres;
}
Ezzel eddig nincs is gond, de a függvény bizonyos esetekben meghívja önmagát. És ilyenkor újra létrehozza
vector<string> visszateres
-t, és visszatéréskor csak az utolsó futás eredménye lesz benne.
A kérdés: hogy lehetne, hogy minden hozzáadott elem megmaradjon a vektorban, és a függvény ezzel térjen vissza?
- 6021 megtekintés
Hozzászólások
Ha jol ertem a "
//Dolgok
" kozott vannak hivasok onmagara. Mi lenne, ha nem lokalis valtozoban gyujtened ossze a sztringeket? Parameterkent adnad at a "
visszateres
"-t, oda gyujtened oket. "
void fuggveny (vector<string>& visszateres, string input)
"
- A hozzászóláshoz be kell jelentkezni
Működik, örök hála. (Fél órát görcsöltem vele, mire rájöttem, hogy a saját magát meghívó résznél nem adtam át neki a vektort...)
- A hozzászóláshoz be kell jelentkezni
Mivel vectort visszatérési értéknek adni eleve teljesen gáz (tripla másolás), pláne rekurzív függvénnyel, tényleg a referenciás módszer a legjobb.
- A hozzászóláshoz be kell jelentkezni
Legalább még azt a kódot beírhattad volna még, hogy hogyan hívja rekurzívan önmagát, és mit csinál önmaga visszatérési értékével...
- A hozzászóláshoz be kell jelentkezni
Semmi extra:
vector fuggveny (string input)
{
vector visszateres;
// Dolgok, visszateres.push_back("valami");
if(rekurzio) fuggveny(megfeleloInput);
return visszateres;
}
- A hozzászóláshoz be kell jelentkezni
Hja, hát ha a visszatérési értéket csak úgy lazán eldobja, akkor ne csodálkozz...
- A hozzászóláshoz be kell jelentkezni
Nem csodálkoztam rajta, tudtam hogy mi lesz, csak egy megoldást kérdeztem (és kaptam).
- A hozzászóláshoz be kell jelentkezni
Bocs, úgy látszik túl optimista voltam, amikor feltételeztem, hogy a visszatérési értékkel kezdesz valamit, és annak ellenére nem működik.
- A hozzászóláshoz be kell jelentkezni
Köszönöm építő jellegű hozzászólásaidat.
- A hozzászóláshoz be kell jelentkezni
1.
static vector visszateres;
De ekkor nem torlodik a visszateres, kov hivaskor bajaid lehetnek.
2. nem a fugvenyben deklaralod.
3. fugvenynek argumentumava teszed a visszaterest, mint referencia
Ha ragszkodsz az egy argumentumhoz, akkor az egy argumentumos hivja a ket argumentumosat, es ket argumentumos is a ketargumentumosat
4. ird meg nem rekurziva, ritkan eri meg rekurziv fugvenyeket hasznalni.
- A hozzászóláshoz be kell jelentkezni
A harmadik lett a megoldás (és ez azon ritka problémák egyike, amikor rekurzió szükséges [könyvtárszerkezet bejárása]).
- A hozzászóláshoz be kell jelentkezni