Cod*_*ust 0 c++ string recursion function c++17
//void squarewall function below is showing error
void squareWall(int s) {
static int count=0;
if(count == s)
return ;
string t;
for(int i=0;i<s;i++){
t = t + "* ";
}
cout<<t<<"\n";
count++;
return squareWall(s);
}
Run Code Online (Sandbox Code Playgroud)
我已经编写了使用单循环和递归调用在 C++ 中打印 * 方形图案的函数。它为自定义案例提供正确的输出,但在提交时显示分段错误。有人可以解释一下这里的情况吗?
由于您的变量count是静态的,因此它被声明一次,之后就不会被分配零。这就是为什么这个函数不会进入无限递归,但这也是为什么当您第二次调用函数时,它不会初始化 counter。
所以,如果你做这样的事情
squareWall(size);
squareWall(size);
Run Code Online (Sandbox Code Playgroud)
第一次调用成功,但第二次调用时,由于count仍然等于size,因此您的函数立即返回。
然而,在这个例子中
squareWall(size);
squareWall(size - 1);
Run Code Online (Sandbox Code Playgroud)
第一次调用仍然成功,但第二次调用不会返回到保护子句,因为count == size, s == size - 1。之后,您的函数将永远不会返回,因此它最终会陷入无限递归,这在某些时候会导致SEGFAULT。
在递归函数中使用静态变量通常不是一个好习惯,它往往会导致类似的情况。一种解决方案是声明count为具有默认值的参数:
void squareWall(int s, int count = 0)
{
if (count == s)
return;
string t;
for (int i = 0; i < s; i++)
{
t = t + "* ";
}
cout << t << "\n";
return squareWall(s, count + 1);
}
Run Code Online (Sandbox Code Playgroud)