我在制作使用递归的解决方案时难以找到数组中最长的值序列> 0。 例如,如果将此数组传递给函数:
const int LongestVal[13] =
{ 11, -8, 5, 3, 2, -5, 12, 8, 3, 6, -1, -2, };
应该返回4.(12,8,3,6)
我对递归有很好的把握但到目前为止找不到这样做的方法是不成功的。并没有找到这样的任何其他帖子。 我也能够编写一个执行任务的函数(不使用递归)。
int longest(const int a[],int size) {
int count = 0; //counter for counting # > 0
int max_count = 0; //return value of max count
for (int i = 0; i < size; i++) {
if (a[i] > 0) {
count++; //increment for every + number in a row
if (count > max_count)
max_count = count; //set if current count streak is highest
}
else
count = 0; //reset count on # <= 0
}
return max_count;
}
答案 0 :(得分:0)
您不需要使用递归。一个简单的解决方案是:
int longest(const int a[], int start, int end) {
int longest = 0;
int currentLength = 0;
for (int i = start; i <= end; ++i)
{
int value = i < end ? a[i] : -1;
if (value <= 0)
{
longest = currentLength > longest ? currentLength : longest;
currentLength = 0;
}
else
currentLength++;
}
return longest;
}
如果你真的想要使用递归,只需通过迭代从0开始到size-1来调用这个函数的大小,并保持end = size,这与调用start = 0和end = size相同; / p>
答案 1 :(得分:0)
这是从迭代函数编辑的递归函数 -
int longest(const int a[],int size,int count,int max_count) {
//base case
if(size<0)
return max_count;
if (a[size] > 0) {
count++; //increment for every + number in a row
if (count > max_count)
max_count = count; //set if current count streak is highest
}
else
count = 0; //reset count on # <= 0
size--; //array will be traversed from end to start
max_count=longest(a,size,count,max_count);
return max_count;
}