具有递归函数的分段错误

时间:2014-09-11 09:27:55

标签: c recursion segmentation-fault

我对使用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);
}

我将不胜感激。

非常感谢

4 个答案:

答案 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

因为第一个参数没有设置。

另外,请注意第二行:使用==代替=