用于函数和void函数:
int countoccu(int array[],int value,int lower,int upper)
{
int counter=0;
if(lower==upper)
if (array[lower]==value)
return 1;
else
return 0;
else
counter = counter + countoccu(array, value, lower+1, upper);
if (array[lower]==value)
counter++;
return counter;
};
任何人都可以为我解释这个
输出为3
void main()
{
int array[5]={3,7,3,3,11};
cout << countoccu(array,3,0,4) << endl;
}
答案 0 :(得分:2)
使用重复计算,给定value
范围内给定array
的{{1}}次出现次数是一种非常愚蠢的方法。
(如果我理解的那么好。)
这看起来像是一个家庭作业,所以我会留下它如何发生在你身上。我的提示是用纸 - 铅笔调试器逐行分析代码。
答案 1 :(得分:1)
int countoccu(int array[],int value,int lower,int upper){
int counter=0;
// Check if the end of the array is reached
if(lower==upper)
// Is the last element the "value" we are looking for?
if (array[lower]==value)
// Yes, so count it
return 1;
// No, don't count it
else return 0;
// Not the end of the array
else
// Move the position to the next item in the array and count it and all the following values that equals "value"
counter=counter+countoccu(array,value,lower+1,upper);
// Is the current item equal to the value being counted?
if (array[lower]==value)
// Yes, so count it
counter++;
return counter;
In your example you will get these calls:
countoccu(array,3,0,4) = 1+0+1+1+0 = 3
countoccu(array,3,1,4) = 0+1+1+0 = 2
countoccu(array,3,2,4) = 1+1+0 = 2
countoccu(array,3,3,4) = 1+0 = 1
countoccu(array,3,4,4) = 0 = 0
答案 2 :(得分:0)
虽然功能写得很差,但其工作原理很简单。它检查索引较低的元素是否等于给定值。如果是这样的话,它会增加计数,并在索引低于低于+1的情况下从下一个索引开始添加数组的计数(此时调用自身为低于+ 1)。
我会按以下方式重写函数
/* constexpr */ size_t count( const int a[], size_t n, int value )
{
return ( n == 0 ? 0 : ( ( a[0] == value ) + count( a + 1, n - 1, value ) ) );
}
我评论说明者constexpr因为我认为你不知道它的含义。所以可以省略。