2015-04-01 27 views
0

我有這個程序使用遞歸找到數組中最大的整數,但它不斷返回輸入的最後一個數字,而不管最大數值是多少。我該如何解決?使用遞歸問題的一個數組的C++最大值

#include <iostream> 

using namespace std; 

int maximum(int digits[], int size, int largest, int i); 

void main() 
{ 
    const int size = 3; 
    int digits[size]; 
    int n = 0, x = 0; 

    for(int a = 0; a < size; a++) 
    { 
     cout << "Enter an integer <" << ++x << " out of " << size << ">: "; 
     cin >> digits[n]; 
    } 

    cout << "\nThe largest digit is, " << maximum(digits, size, 0, 0) << ", thank you!\n"; 
    cout << endl; 
} 


int maximum(int digits[], int size, int largest, int i) 
{ 
    if (i < size) 
    { 
     if (largest < digits[i]) 
      largest = digits[i]; 

     maximum(digits, size, largest, i + 1); 
    } 
    return largest; 
} 
+0

您是否仔細追蹤過每一行的功能,並將其與您期望的相比較(例如,使用調試器)? – chris 2015-04-01 02:14:11

+0

我有,這似乎是正確的,我多數民衆贊成爲什麼我卡住 – beginnerjohn 2015-04-01 02:17:41

+0

@beginnerjohn,如果每一行的執行似乎正確的執行(所有變量都有預期的值,該行是你期望的下一行),然後,然後該程序按照您的預期工作。 – chris 2015-04-01 02:32:42

回答

0

首先正確使用索引變量在main()

for(int a = 0; a < size; a++) 
    { 
     cout << "Enter an integer <" << ++x << " out of " << size << ">: "; 
     cin >> digits[a];//-->Use the index varible correctly. 
    } 

int maximum(int digits[], int size, int largest, int i) 
{ 
    if(i==size-1) 
    return digits[i]; //The base case is specified here. 
    if (i < size) 
    { 
     int temp= maximum(digits, size, largest, i + 1); 
     if (digits[i] < temp) 
      largest =temp; 
     else 
     largest=digits[i]; 

    } 
    return largest; 
} 

請檢查出的變化。仔細閱讀代碼。你會明白你的錯誤。

在設計遞歸想到的幾件事情須先行

  • 基本條件。 (這會停止遞歸)。

  • 遞歸步驟。 (根據之前的計算,你將計算出一些東西)

  • 合併步驟 - 你必須合併它們(現階段的值和recusive步驟得到的值)才能得到正確的答案。在某些情況下,此步驟不是必需的。

+0

@beginnerjohn .:希望你已經明白了你的錯誤... – coderredoc 2015-04-01 02:46:55

+0

謝謝,這使得更多的意義 – beginnerjohn 2015-04-01 02:52:25

+0

一個問題,爲什麼我會使用如果(i ==大小-1)不是如果(我==大小)或如果(ⅰ>大小)?只是這樣我才能更好地理解代碼。 – beginnerjohn 2015-04-01 03:07:59

0

應該return maximum(digits, size, largest, i + 1);

Live example

+0

那不能解決它 – beginnerjohn 2015-04-01 02:16:55

+0

@beginnerjohn:什麼問題?請參閱https://ideone.com/Ihbe5E – Jarod42 2015-04-01 07:18:42

+0

最初的問題是程序只是返回輸入的最後一個值,不管數值是多少,而不是數組中最大的元素。添加回報並沒有改變任何東西。該問題已被修復 – beginnerjohn 2015-04-01 13:58:22