Изменение моей обратной функции строки для добавления рекурсии. К сожалению, моя программа продолжает взрываться.Программа, взорвавшаяся после использования рекурсии
Прошел мой код в Visual Studio и по какой-то причине окно просмотра скажет, что i равно длине строки (то есть завершающему условию выхода из цикла while). Я перешагиваю его в последний раз, и он говорит, что теперь я меньше длины строки. Затем он остается в цикле while навсегда.
Я знаю, что это звучит запутанно, поэтому приведу пример. Я вхожу в «Spongebob», и он делает все, что я хочу (т. Е. Говорит, что длина Spongebob равна 9, печатает «bobegnopS», увеличивает i до длины строки и т. Д.), Но затем он говорит, что i теперь 8 (т.е. только на 9) и никогда не выходит из цикла while.
Вот моя ReverseString функция():
void ReverseString(char * string, bool stringReversed, int stringLength, int i)
{
i++;
if(!stringReversed)
{
while(*string != '\0')
string++;
}
stringReversed = true;
while(i < stringLength)
{
string--;
std::cout << *string;
ReverseString(string, stringReversed, stringLength, i);
}
}
Вот вызов:
case 3:
//Learn By Doing 16.6
{
char string[BUFFER_LENGTH];
bool stringReversed = false;
int base = 0;
int exponent = 0;
std::cout << "\nEnter base: " << std::endl;
std::cin >> base;
std::cout << "\nEnter exponent: " << std::endl;
std::cin >> exponent;
//Print pow
NewLine();
std::cout << base << " to the " << exponent << " is " << pow(base, exponent);
//Reverse string using recursion
std::cout << "\nEnter string: " << std::endl;
std::cin >> string;
NewLine();
int stringLength = strlen(string);
int i = 0;
ReverseString(string, stringReversed, stringLength, i);
}
Вам нужна точка возврата в функции ReverseString – billz
Вы имеете в виду, что у меня не может быть ReverseString, поскольку это рекурсивная функция? Поэтому я должен сделать его char * ReverseString, чтобы вернуть указатель на символ? – MrPickle5
Я не имею в виду тип возврата, функция void все равно может вернуться; – billz