在运行C递归程序时转储核心

时间:2017-07-11 10:37:08

标签: c recursion

当我运行以下C程序时,编译器显示分段错误(核心转储)。我不明白为什么会这样,我怎么能检索这段代码。

#include <stdio.h>
int power(int x, int n)
{
  if (n = 0)
    return 1;
  else
    return x * power (x, n - 1);
}

int main(void)
{
  int x=3,n=4;
  printf("the answer is:%d\n",power(3,4));
  return 0;
}

3 个答案:

答案 0 :(得分:7)

if (n = 0)是一种无效的递归阻止程序,因为它 0分配给n并评估为0。所以目前该函数自称为 ad infinitum ,这会导致您平台上的核心转储。

你的意思是if (n == 0),还是更好的if (!n)

合理的编译器会在这种情况下发出警告。你把它们关掉了吗?

答案 1 :(得分:4)

你正在做错字错误我在行,如果(n = 0)而不是 if(n == 0)

int power(int x, int n) {
    if (n == 0)
        return 1;
    else
        return x * power (x, n - 1);
}

答案 2 :(得分:0)

如果您输入 “if(n = 0)” 这意味着您要为变量n赋值。 运算符“==”表示您正在比较左侧的值和右侧的值。 所以用= =

替换=