在下面的代码中,当我试图输入一个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;
}
发布于 2021-04-24 06:09:27
函数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
}
无限递归可能会使用堆栈up并导致分段错误。(它可能不会导致这种情况:例如,当尾部调用优化完成时)
https://stackoverflow.com/questions/67236706
复制相似问题