C ++ [recursion]找到大于0的最长值序列

时间:2017-03-20 19:20:07

标签: c++ recursion

我在制作使用递归的解决方案时难以找到数组中最长的值序列> 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; 
}

2 个答案:

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