Софтуерно Инженерство
Loading...
melda.h avatar melda.h 4 Точки

Рекурсия и динамична памет

Въпросът ми е как да се справя със заделянето на памет в рекурсивна функция. Тази рекурсивна функция трябва да приема един char масив и да върне нов масив динамично заделен?

char* decompression(char* string){

}

0
C++ Programming
MartinBG avatar MartinBG 1139 Точки

Как бихте подходили към решението, ако резултатът не трябва да е указател към динамично заделена памет (напр. int)?

Концепцията е същата, само трябва да се грижите да освобождавате заделената динамична памет, когато няма да ни трябва повече.

 

0
melda.h avatar melda.h 4 Точки

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);

}

Дано да съм обяснила добре къде се затруднявам. :)

0
MartinBG avatar MartinBG 1139 Точки

От този код не става ясно какво се случва с резултата, който връща рекурсивната функция и как се променят входните параметри при всяко ново извикване, но по-важното е, че не виждам дъното (т.н. base case) на рекурсията, т.е. условието, при което функцията ще спре да се самоизвиква (без това условие програмата ще крашне с препълване на стека).

Бих препоръчал да прочетете повече по темата.

Напр:

https://en.wikipedia.org/wiki/Recursion_(computer_science)

http://www.danzig.us/cpp/recursion.html

https://www.programiz.com/cpp-programming/recursion

 

Иначе, ако искаме стойността на дадена променлива да не се губи, може да дефинираме променливата като статична (в тялото на функцията), като глобална, да я подаваме като референтен параметър и т.н. - начини много, като всеки си има своето приложение в различни сценарии. :)

0