当我尝试执行此操作时:
#include<stdio.h>
int byteland(int a)
{
int e,f,g;
if ((a/2 + a/3 + a/4) < a)
return a;
else
{
e = byteland(a/2);
f = byteland(a/3);
g = byteland(a/4);
return e + f + g;
}
}
int main()
{
int a, b;
scanf("%d", &a);
b = byteland(a);
return 0;
}
我得到分段错误(核心转储)。任何解决方案?
答案 0 :(得分:5)
如果对0
使用a
,则会得到无限递归 - 堆栈溢出。对于许多负数,你也会获得无限递归。
不确定这个函数应该做什么,但当a
等于0
时,没有什么可以打破递归。
当a
等于0
时,我会添加一个子句来打破递归。
int byteland(int a)
{
int e,f,g;
if ( a == 0 )
{
return 0;
}
else if((a/2+a/3+a/4)<a)
{
return a;
}
else
{
e=byteland(a/2);
f=byteland(a/3);
g=byteland(a/4);
return e+f+g;
}
}