我有这个程序使用递归查找数组中的最大整数,但它会不断返回输入的最后一个数字,无论值是什么而不是最大数字。我该如何解决这个问题?
#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 :(得分:0)
应为return maximum( digits, size, largest, i + 1);
答案 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;
}
请查看更改。仔细阅读代码。你会理解你的错误。
在设计递归时首先考虑一些事情 -
基本情况。 (这会停止递归)。
递归步骤。 (根据以前的计算,你将计算某些东西)
组合步骤 - 您必须将它们组合在一起(此阶段的值和从重复步骤获得的值)以获得正确的答案。在某些情况下不需要此步骤。