写一个函数计数(数字,数组,长度),它将计算数字出现在数组中的次数

时间:2013-05-29 23:18:21

标签: c++ recursion

我正在完成我自己的o'reilly教科书中的问题集,我对我应该用这个程序做什么感到困惑。 问题是:编写一个函数count(number, array, length),它将计算array中数字出现的次数。该数组有length个元素。该函数应该是递归的。编写测试程序以使用该功能。

这个问题是逐字逐句复制的,但我对这个问题有几个疑问。如果您可以发表评论,说明您对以下内容的看法,那就太好了:

  1. 好的,我需要arraylength,我是否将自己的号码存储在广告位中?或者我是否会生成随机整数进入插槽?
  2. 另外,我有正确的计划吗?我的计划是:
  3. 创建数组并在main中调用count。 函数count将是一个遍历数组的if循环,直到它找到number然后它将一个添加到一个计数器。那么count函数将使用参数count(int number; int array; int (length - 1))

    调用它自己

    现在我试着通过它自言自语,现在我更加困惑了。也许我只是让问题变得更加困难。任何提示都会有帮助。感谢

2 个答案:

答案 0 :(得分:2)

我认为代码片段的价值超过了很多单词。所以我会选择类似的东西:

#include <iostream>

int count(int num, int* arr, int length) {
    if (!length)
        return 0;
    int c = count(num, arr+1, length-1);
    return arr[0] == num? c + 1: c;
}

int main(void) {
    int arr[10] = {1, 2, 3, 4, 3, 2, 1, 4, 3, 2};

    std::cout << count(2, arr, 10);

    return 0;
}

输出:

3

答案 1 :(得分:0)

  1. 要测试您的功能是否正确,您可以在阵列中使用自己的数字。算法的工作原理非常重要。
  2. 不,你的做法是错的。递归有两个部分:
  3. a)关于你所知道的条款

    b)关于如果你改变你所拥有的东西你可以知道的条款。

    因此,在您的情况下,函数count(.....)应首先了解length是否为0,因为number中的数字array为0 {0}。如果不是,则需要使用count(.....)调用函数number作为数字(因为您仍需要计算相同的数字)array除了数组的最后一个元素和length-1。递归地向下移动数组,直到它没有更多的项目。

    短暂休息,让大脑焕然一新〜

    您应该将函数的返回值保存在变量中,然后在array的最后一项为number时添加1,否则不添加。并再次返回该值。现在,这个值在所有函数调用中向后传递,如果我们正在查看的arrayelement是number,则递增。对count(....)的原始调用会返回number

    array的数量

    我希望我的解释没有失败。