当我试图执行此操作时:
#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
用于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;
}
}
关于c - 具有递归功能的段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23861440/