//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);
}
我写了一个函数,在c++中使用单循环和递归调用来打印正方形的 *。它给出了自定义情况下的正确输出,但在提交时显示分段错误。有人能解释一下这里是什么情况吗?
1条答案
按热度按时间sulc1iza1#
因为变量
count
是静态的,它只声明一次,之后就不会被赋值为0,这就是为什么这个函数不会进入无限递归,也是为什么当你第二次调用这个函数时,* 它不会初始化计数器 *。如果你做了这样的事
第一次调用成功,但是第二次,由于
count
仍然等于size
,所以函数立即返回。但是在这个例子中
第一次调用仍然成功,但是第二次调用将不返回到保护子句,因为
count == size
,s == size - 1
,在那之后,你的函数将永远不会返回,所以它以无限递归结束,这在某个点上导致SEGFAULT。在递归函数中使用静态变量通常不是一个好的做法,因为它往往会导致这样的情况。一个解决方案是将
count
声明为一个具有默认值的参数: