为什么我会出现堆栈溢出?建议将不胜感激

时间:2019-10-28 03:47:47

标签: c++

因此,我对编码非常陌生,如果我的代码让您畏缩,我会事先道歉。我有一个编码作业,编写了一个使用递归函数以所有大写字母显示c_string的程序。当运行我的代码时,我输出“ A”,然后堆栈溢出,我也不知道为什么。请协助我,以帮助我了解我的代码哪里出了问题。另外,如果您对我应该如何针对此问题进行不同的编码有任何建议,请告诉我!

我尝试使用for循环进行更改,但我正在在线阅读其迭代功能,并且不适用于递归。

#include <iostream>
#include <ctype.h>
using namespace std;

void showInUpper(char alphabet[], int i);


int main()
{

char alphabet[27]{ "abcdefghijklmnopqrstuvwxyz" };
int i = 0;

showInUpper(alphabet, i);

cout << endl << endl;
}

void showInUpper(char alphabet[], int i)
{

if (alphabet[i] == '\0')
{
    return;

}

else if (alphabet[i] != toupper(alphabet[i]))
{
    alphabet[i] = toupper(alphabet[i]);
    cout << alphabet[i] << '\t';
}

showInUpper(alphabet, i++);
}

因此,预期结果应如下所示。

ABCDEFGHIJKLMNOPQRSTUVWZXYZ

1 个答案:

答案 0 :(得分:2)

您将i的相同值传递给showInUpper的每次调用,因为i直到传递给函数后才会递增。结果,您将无休止地递归。

使用预增量运算符代替:

showInUpper(alphabet, ++i);

以使i在传递之前先递增。