当我尝试执行此操作时:
#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;
}
我遇到段错误(核心已转储)。有什么解决办法吗?
最佳答案
如果您对a
使用0
,您将得到无限递归——堆栈溢出。您还可以获得许多负数的无限递归。
不确定这个函数应该做什么,但是当 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/