数组的C++最大值使用递归问题

C++ max of an array using recursion issue

本文关键字:递归 问题 最大值 C++ 数组      更新时间:2023-10-16

我有一个程序,它使用递归找到数组中最大的整数,但无论值是多少,它都会返回最后输入的数字,而不是最大的数字。我该怎么解决这个问题?

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

首先在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;
}

请查看更改。仔细阅读代码。你会理解你的错误的。

在设计递归时,首先要考虑几件事——

  • 基本条件。(这将停止递归)。

  • 递归步骤。(您将在之前的计算基础上进行计算)

  • 组合步骤-你必须组合它们(这个阶段的值和回避步骤的值)才能得到正确的答案。在某些情况下不需要此步骤。

应该是return maximum( digits, size, largest, i + 1);

活生生的例子。

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