Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

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

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

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

char* decompression(char* string){

}

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

Как бихте подходили към решението, ако резултатът не трябва да е указател към динамично заделена памет (напр. 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 4803 Точки

От този код не става ясно какво се случва с резултата, който връща рекурсивната функция и как се променят входните параметри при всяко ново извикване, но по-важното е, че не виждам дъното (т.н. 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.