我正在完成我自己的o'reilly教科书中的问题集,我对我应该用这个程序做什么感到困惑。
问题是:编写一个函数count(number, array, length)
,它将计算array
中数字出现的次数。该数组有length
个元素。该函数应该是递归的。编写测试程序以使用该功能。
这个问题是逐字逐句复制的,但我对这个问题有几个疑问。如果您可以发表评论,说明您对以下内容的看法,那就太好了:
array
长length
,我是否将自己的号码存储在广告位中?或者我是否会生成随机整数进入插槽?创建数组并在main中调用count
。
函数count
将是一个遍历数组的if循环,直到它找到number
然后它将一个添加到一个计数器。那么count
函数将使用参数count(int number; int array; int (length - 1))
现在我试着通过它自言自语,现在我更加困惑了。也许我只是让问题变得更加困难。任何提示都会有帮助。感谢
答案 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)
a)关于你所知道的条款
b)关于如果你改变你所拥有的东西你可以知道的条款。
因此,在您的情况下,函数count(.....)
应首先了解length
是否为0,因为number
中的数字array
为0 {0}。如果不是,则需要使用count(.....)
调用函数number
作为数字(因为您仍需要计算相同的数字)array
除了数组的最后一个元素和length-1
。递归地向下移动数组,直到它没有更多的项目。
您应该将函数的返回值保存在变量中,然后在array
的最后一项为number
时添加1,否则不添加。并再次返回该值。现在,这个值在所有函数调用中向后传递,如果我们正在查看的arrayelement是number
,则递增。对count(....)
的原始调用会返回number
array
的数量
我希望我的解释没有失败。