使用递归问题的数组的C ++ max

时间:2015-04-01 02:12:05

标签: c++ arrays recursion

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

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

2 个答案:

答案 0 :(得分:0)

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

Live example

答案 1 :(得分: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;
}

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

在设计递归时首先考虑一些事情 -

  • 基本情况。 (这会停止递归)。

  • 递归步骤。 (根据以前的计算,你将计算某些东西)

  • 组合步骤 - 您必须将它们组合在一起(此阶段的值和从重复步骤获得的值)以获得正确的答案。在某些情况下不需要此步骤。