当我试图执行此操作时:

#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/

10-11 07:08