2014-07-21 18 views
0

我不明白爲什麼會發生此錯誤:錯誤:控制可能會達到非無效函數的結束。錯誤:控制可能會在C中的非void函數結束 - 遞歸搜索

我明白這個錯誤意味着函數可能會在沒有返回任何東西的情況下達到最終結果,但我無法弄清楚會發生什麼。

我只傳遞一個非void數組到函數,如果這是任何安慰。

下面是代碼:

int recursivesearch(int values[], int lower, int upper, int value) 
{ 
    int mid = (lower+upper)/2; 
    if(lower>upper) 
     return false;   
    if(value>values[mid]) 
     recursivesearch(values,mid+1,upper,value); 
    else if(value<values[mid]) 
     recursivesearch(values,lower,mid-1,value); 
    else 
     return mid; 
} 

由於最後一條語句只是一個「別人的情況下,這將確保一個回報,對不對?

回答

2

如果你看看你的ifelse if塊,你實際上不會返回任何東西。您只需運行該函數並拋出返回的值。您可能需要return recursivesearch(...)

3

As the last statement is just an 'else' condition, it would ensure a return, right?

是的。但問題是你的代碼中還有其他的地方。請注意,函數的返回類型是int,但在ifelse if語句中都沒有返回任何值。更改

if(value>values[mid]) 
    recursivesearch(values,mid+1,upper,value); 
else if(value<values[mid]) 
    recursivesearch(values,lower,mid-1,value); 

if(value>values[mid]) 
    return recursivesearch(values,mid+1,upper,value); 
else if(value<values[mid]) 
    return recursivesearch(values,lower,mid-1,value); 

wiki

相關問題