我对使用C语言进行编程非常陌生,而且似乎无法找到我所获得的分段错误的原因。我写的程序如下:
# include <stdio.h>
# include <stdlib.h>
int recursive(int x){
if(x=0)
{
return 2;
}
else
{
return 3*(x-1)+recursive(x-1)+1;
}
}
int main(int argc, char *argv[])
{
int N = atoi(argv[1]);
return recursive(N);
}
我将不胜感激。
非常感谢
答案 0 :(得分:3)
if(x=0){...}
这是错误的
应该是
if(x==0){...}
注意:
if (x = 0)
is the same as:
x = 0; if (x)
答案 1 :(得分:2)
此:
if(x=0){
不是(纯)测试,而是一项任务。它在if
中工作,因为它也有一个值(零),但它总是假的,所以从不采用分支,即递归永不停止。
您应该启用所有编译器警告,这通常被编译器捕获。
答案 2 :(得分:2)
将if(x = 0)
更改为if(0 == x)
编写0 == x
代替x == 0
是一个很好的规则,因为如果出现像=
而不是==
这样的拼写错误,编译器会给出错误。
答案 3 :(得分:1)
段错误来自argv[1]
的使用。确保使用参数调用函数,如下所示:
$ ./a.out 6
a.out
您的程序名称,6
您想要应用该功能的号码。
以下行将创建一个段错误:
$ ./a.out
因为第一个参数没有设置。
另外,请注意第二行:使用==
代替=