使用递归查找特定范围内数组中的数字数量

Finding the amount of numbers within an array within a specific range using recursion

我已经在递归作业上卡了几个小时了。 基本上它的递归练习,除了一件事我完成了所有事情:

求数组中范围内数字的数量。

我必须使用递归和数组指针。到目前为止,我已经找到了数组的总和,并找到了数组中的数字是否在范围内。没问题。 但是,现在我必须找到它在范围内出现的次数。我可以使用循环并使用“计数器索引”变量来完成它,但我必须使用递归。 我似乎无法让它工作。 现在我的尝试是这样的:

int numberOfValuesInRange(float min, float max, const float *pBegin, const float *pEnd){

     if(pBegin >= pEnd) // base case
         return 0;
     if (min+max - *pBegin >= min+max)

         return 0 + numberOfValuesInRange(min, max, pBegin, pEnd);

}

我一无所获。 下面是 sum 和 bool 的其他代码,如果它有范围内的数字。

数组的总和。

float sum(const float *pBegin, const float *pEnd){  //Adds all elements in array of float numbers and returns their sum
    if (pBegin >= pEnd)
        return 0;
    return *pBegin + sum(pBegin+1, pEnd);
}

并检查数组是否包含范围内的值:

bool hasValueInRange(float min, float max, const float *pBegin, const float *pEnd){ //Checks if array elements are within min/max range

    if(pEnd > pBegin && *pBegin <= max && *pBegin >= min){
        cout << "Array DOES contain values in range " << endl;
        return true;}
        else{
            cout << endl << "Array does NOT contain values in range " << endl;
            return false;
        }
}

这是我的主要功能(如果有帮助的话):

int main(){
    const int size = 5;
    float sampleArray[5] = {2, 4, 6, 0, 1};
 sum(&sampleArray[0], &sampleArray[size])
hasValueInRange(0, 5, &sampleArray[0], &sampleArray[size]); //Checks for values between 0 and 5
        int x = 0;
        x = numberOfValuesInRange(2,5, &sampleArray[0], &sampleArray[size]); //Occurences within range 2 to 5
    cout << x; // Should be 2
return 0;

任何帮助都会很好,谢谢! 我知道它只是缺少了一块拼图...

如果数字在范围内加一

if ((*pBegin) >= min && (*pBegin) <= max)
            return 1 + numberOfValuesInRange(min, max, pBegin+1, pEnd);

代码:

#include <iostream>

using namespace std;

int numberOfValuesInRange(float min, float max, const float *pBegin, const float *pEnd){

    if(pBegin >= pEnd) // base case
        return 0;
    //if (min+max - *pBegin >= min+max)
    //  return 0 + numberOfValuesInRange(min, max, pBegin, pEnd);
    if ((*pBegin) >= min && (*pBegin) <= max)
        return 1 + numberOfValuesInRange(min, max, pBegin+1, pEnd);

    return numberOfValuesInRange(min, max, pBegin+1, pEnd);

}

float sum(const float *pBegin, const float *pEnd){  //Adds all elements in array of float numbers and returns their sum
    if (pBegin >= pEnd)
        return 0;
    return *pBegin + sum(pBegin+1, pEnd);
}

bool hasValueInRange(float min, float max, const float *pBegin, const float *pEnd){ //Checks if array elements are within min/max range

    if(pEnd > pBegin && *pBegin <= max && *pBegin >= min){
        cout << "Array DOES contain values in range " << endl;
        return true;}
    else{
        cout << endl << "Array does NOT contain values in range " << endl;
        return false;
    }
}

int main(){
    const int size = 5;
    float sampleArray[5] = {2, 4, 6, 0, 1};
    cout<<sum(&sampleArray[0], &sampleArray[size])<<endl;
    hasValueInRange(0, 5, &sampleArray[0], &sampleArray[size]); //Checks for values between 0 and 5
    int x = 0;
    x = numberOfValuesInRange(2,5, &sampleArray[0], &sampleArray[size]); //Occurences within range 2 to 5
    cout <<x<<endl; // Should be 2
    return 0;
}

输出:

$ g++ recurssion.cpp && ./a.out
13
Array DOES contain values in range 
2