簡體   English   中英

C++ 使用遞歸問題的數組最大值

[英]C++ max of an array using recursion issue

我有這個程序,它使用遞歸在數組中找到最大的 integer,但無論值是什么,它都會返回最后輸入的數字,而不是最大的數字。 我該如何解決?

#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;
}

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

現場例子

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

  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;
}

請檢查更改。 仔細閱讀代碼。 您將了解您的錯誤。

在設計遞歸時,首先要考慮的幾件事-

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

  • 遞歸步驟。 (您將根據先前的計算來計算內容)

  • 合並步驟-您必須將它們合並(此階段的值和從追溯步驟獲得的值)才能獲得正確的答案。 在某些情況下,不需要此步驟。

int biggestOne(int integerArray[], int lengthOfArray, int max)
{
    if (lengthOfArray==0) return max;
    if (max < integerArray[lengthOfArray-1]) max = integerArray[lengthOfArray-1];
    return biggestOne(integerArray,lengthOfArray-1,max); 
}

int main()
{
    int array[] = {7,2,9,10,1};
    int arrSize = sizeof(array)/sizeof(array[0]); //returns length of the array

    cout <<"Biggest number in the array: " << biggestOne(array,arrSize,0) << endl;
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM