2016-03-31 85 views
0
int f(int a[], int size) { 
    if (size == 1) 
     return arr[0]; 
    size--; 
    return f((arr + (arr[0] > a[size])), size); 
} 

我試圖返回最小值的索引。上面的代碼返回最小值的VALUE,但是我無法返回索引,任何人都可以幫忙嗎?此外,我只允許將2個參數傳遞給函數,數組和數組的大小。迴歸min索引遞歸

+1

這是什麼語言? C? C++? – Paul

+0

如果函數使用C或C++(或基於C或C++的任何語言),那麼您無法真正返回多個值。您可以將其作爲* output *參數,或者使用* pair *或* tuple *或* structure *或甚至一個*數組* *(在某些語言中)作爲返回值「返回」。具體怎麼做取決於你對我們一無所知的語言。 –

+0

或者等待,你是否想將函數改爲* only *返回索引,而不是值? –

回答

0
下面

見代碼(修改爲只使用2個參數):

int f(int a[], int size) { 
    if (size <= 1) 
     return 0; 
    int i = f(a, --size); 
    return a[size] < a[i] ? size : i; 
} 
+0

謝謝@rbaghbanli,這絕對有幫助。有沒有辦法做到這一點只傳遞2個參數到函數,數組和數組的大小? – JayC

+0

當然,修改爲僅使用2個參數。 –

+0

這樣做了!謝謝SOOOO @rbaghbanli – JayC

1

像這樣的東西可能會工作:

size_t f(int a[], size_t low_index, size_t high_index) { 
    if (low_index == high_index) { 
     return low_index; 
    } 

    if (arr[low_index] > arr[high_index]) { 
     low_index++; 
    } else { 
     high_index--; 
    } 

    return f(a, low_index, high_index); 
} 

你會先f(a, 0, size-1)調用它。

這麼說,我不知道爲什麼你要當它似乎更容易做到在一個循環做到這一點遞歸:

size_t f(int a[], size_t size) { 
    size_t min_index = 0; 
    int min_value = a[0]; 
    for (size_t i = 1; i < size; ++i) { 
     if (a[i] < min_value) { 
      min_value = a[i]; 
      min_index = i; 
     } 
    } 

    return min_index; 
}