Рекурсия и динамична памет
Въпросът ми е как да се справя със заделянето на памет в рекурсивна функция. Тази рекурсивна функция трябва да приема един char масив и да върне нов масив динамично заделен?
char* decompression(char* string){
}
Въпросът ми е как да се справя със заделянето на памет в рекурсивна функция. Тази рекурсивна функция трябва да приема един char масив и да върне нов масив динамично заделен?
char* decompression(char* string){
}
Как бихте подходили към решението, ако резултатът не трябва да е указател към динамично заделена памет (напр. int)?
Концепцията е същата, само трябва да се грижите да освобождавате заделената динамична памет, когато няма да ни трябва повече.
A променливата от тип int, която ми е в началото на рекурсивната функция всеки път като влиза във функцията тя се инициализира отново с първоначалната си стойност.
Например:
char* decompression(char* string){
int size = 1;
char* arr = new char[size];
if(.....){
size++;
delete[] arr;
char* arr = new char[size];
}
decompression(string);
}
Дано да съм обяснила добре къде се затруднявам. :)
От този код не става ясно какво се случва с резултата, който връща рекурсивната функция и как се променят входните параметри при всяко ново извикване, но по-важното е, че не виждам дъното (т.н. base case) на рекурсията, т.е. условието, при което функцията ще спре да се самоизвиква (без това условие програмата ще крашне с препълване на стека).
Бих препоръчал да прочетете повече по темата.
Напр:
https://en.wikipedia.org/wiki/Recursion_(computer_science)
http://www.danzig.us/cpp/recursion.html
https://www.programiz.com/cpp-programming/recursion
Иначе, ако искаме стойността на дадена променлива да не се губи, може да дефинираме променливата като статична (в тялото на функцията), като глобална, да я подаваме като референтен параметър и т.н. - начини много, като всеки си има своето приложение в различни сценарии. :)