具有递归函数的分段错误

时间:2014-05-26 01:04:16

标签: c segmentation-fault

当我尝试执行此操作时:

#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;
}

我得到分段错误(核心转储)。任何解决方案?

1 个答案:

答案 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;
   }
}