2014-09-11 99 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 

: 下面一行將創建一個段錯誤。

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