在下面的代码中,我们有一个错误:;退出,分段故障";当我尝试输入x的整数时。
如果x被声明为全局变量,为什么会发生这种情况?
#include <iostream>
using namespace std;
int x;
int a(int &x)
{
int y = x--;
int z = x - 2;
if (y == 0)
{
return (5*4-6*a(z));
}else if (z == 0)
{
return (5*a(y)-6*4);
}else if (y == 1)
{
return (5*9-6*a(z));
}else if (z == 1)
{
return (5*a(y)-6*9);
}else{
return (5*(a(y))-6*(a(z)));
}
}
int main()
{
cout << "Enter an integer value for x: ";
cin >> x;
a(x);
return 0;
}
函数a
的所有执行路径都调用函数a
,因此您正在执行无限递归。
if (y == 0)
{
return (5*4-6*a(z)); // a is called here
}else if (z == 0)
{
return (5*a(y)-6*4); // a is called here
}else if (y == 1)
{
return (5*9-6*a(z)); // a is called here
}else if (z == 1)
{
return (5*a(y)-6*9); // a is called here
}else{
return (5*(a(y))-6*(a(z))); // a is called here
}
无限递归可能会使用堆栈并导致分段故障。(这可能不会导致:例如,当尾调用优化完成时(