c - 具有递归函数的段错误

标签 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;
}

我遇到段错误(核心已转储)。有什么解决办法吗?

最佳答案

如果您对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/

相关文章:

c - 为什么我们不能在 C 中通过引用传递指针?

c - 为什么我不能像 C 中的指针一样对待数组?

c - 复制链表头时出现段错误

sql - Pro*C Oracle——循环获取 sql

c - 在C中左移二维数组的函数

c - 在 C 中使用互斥锁同步两个 pthread

c++ - 递归函数中的段错误,将结果存储在 vector 中

C++ vector.push_back 在指针定义后崩溃

C 代码段错误(核心转储)

c++ - 检查 nullptr 100% 是否可以防止有关内存布局的段错误?