使用递归查找特定范围内数组中的数字数量
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
我已经在递归作业上卡了几个小时了。 基本上它的递归练习,除了一件事我完成了所有事情:
求数组中范围内数字的数量。
我必须使用递归和数组指针。到目前为止,我已经找到了数组的总和,并找到了数组中的数字是否在范围内。没问题。 但是,现在我必须找到它在范围内出现的次数。我可以使用循环并使用“计数器索引”变量来完成它,但我必须使用递归。 我似乎无法让它工作。 现在我的尝试是这样的:
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