2014-09-11 87 views
0

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

我将不胜感激任何帮助。

非常感谢

+6

应该是'如果(0 == x)的' – Igor 2014-09-11 09:28:50

回答

3
if(x=0){...} 

这是错的

应该

if(x==0){...}

注:

if (x = 0) 

is the same as: 

x = 0; if (x) 
2

此:

if(x=0){ 

不是(纯)的测试,这是一个任务。它的工作原理是if,因为它也有一个值(零),但它总是假的,所以从不采用分支,即递归从不停止。

您应该启用所有编译器警告,这通常会被编译器捕获。

2

变化if(x = 0)if(0 == x)

编写0 == x而不是x == 0是一个很好的规则,因为如果发生类似=而不是==这样的错误,编译器会给出错误。

1

段错误来自使用argv[1]。确保你打电话给你的函数的参数,如下:

$ ./a.out 6 

a.out程序的名称,6要应用的功能的数量。因为第一个参数没有设置

$ ./a.out 

: 下面一行将创建一个段错误。

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