编写一个函数count(number, array, length),计算number在array中出现的次数

Write a function count(number, array, length) that will count the number of times number appears in array

本文关键字:number array 计算 一个 函数 count length      更新时间:2023-10-16

我正在自己完成一本非常好的教科书上的问题集,我对我应该用这个程序做什么有点困惑。问题是:写一个函数count(number, array, length),计算number在array中出现的次数。该阵列有length元素。函数应该是递归的。写一个测试程序来运行这个函数。

这个问题一字不差地抄袭了,但是我对这个问题还有几个问题要问。如果你能留下评论,说明你对以下内容的看法,那就太好了:
  1. 好吧,我需要一个长度为lengtharray,我是否将自己的数字存储在插槽中?还是生成随机整数进入槽?
  2. 还有,我的计划是否正确?我的计划是:

创建数组并在main中调用count。函数count将是一个if循环,遍历数组,直到找到number,然后将1添加到计数器中。那么count函数将使用参数count(int number; int array; int (length - 1))

调用它的自身

现在我试着说服自己,我现在更困惑了。也许我只是让问题变得更难了。任何建议都会有所帮助。由于

我认为一个代码片段比一大堆文字更有价值。所以我要这样写:

#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
    为了测试你的函数是否正确,你可以在数组中使用你自己的数字。重要的是算法的工作。不,你的方法是错误的。递归有两部分:

a)关于what you know的从句

b)关于如果你改变你所拥有的,你可以知道什么的从句。

所以在你的例子中,count(.....)函数首先应该知道length是否为0,因为numberarray中是0次。如果不是,你需要调用你的函数count(.....), number作为数字(因为你仍然想计数相同的数字)array,除了数组的最后一个元素和length-1。它递归地将数组铲下,直到数组中没有更多的项。

~短暂休息,让大脑刷新~

将函数的返回值保存在一个变量中,如果array的最后一项是number,则加1,否则不加1。再次返回那个值。现在,这个值在所有的函数调用中都是向后传递的,如果我们正在查看的数组元素是number,这个值就会增加。对count(....)的原始调用返回array

number的个数。我希望我的解释没有错。