解释这个递归函数

时间:2014-01-09 12:03:27

标签: c++ recursion

嘿,有谁能告诉我这个功能是如何运作的?!

用于函数和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;
}

3 个答案:

答案 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因为我认为你不知道它的含义。所以可以省略。