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

mon*_*er -2 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;
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 7

if (n = 0)是无效的递归阻断剂,因为它分配 0n和计算结果为0.因此,目前该函数无限地调用自身,这会导致您的平台上出现核心转储.

你是说if (n == 0),还是更好if (!n)

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

  • @ tilz0R:的确,有些人发誓*Yoda表达*.我个人不喜欢他们. (3认同)
  • 将变量与常量进行比较时的良好编程习惯是在语句中使用常量first,所以类似于`if(0 == n)`,它可以防止赋值错误. (2认同)