当我运行以下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;
}
答案 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赋值。 运算符“==”表示您正在比较左侧的值和右侧的值。 所以用= =
替换=