编写一个函数count(number, array, length),计算number在array中出现的次数
Write a function count(number, array, length) that will count the number of times number appears in array
我正在自己完成一本非常好的教科书上的问题集,我对我应该用这个程序做什么有点困惑。问题是:写一个函数count(number, array, length)
,计算number在array
中出现的次数。该阵列有length
元素。函数应该是递归的。写一个测试程序来运行这个函数。
- 好吧,我需要一个长度为
length
的array
,我是否将自己的数字存储在插槽中?还是生成随机整数进入槽? - 还有,我的计划是否正确?我的计划是:
创建数组并在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,因为number
在array
中是0次。如果不是,你需要调用你的函数count(.....)
, number
作为数字(因为你仍然想计数相同的数字)array
,除了数组的最后一个元素和length-1
。它递归地将数组铲下,直到数组中没有更多的项。
~短暂休息,让大脑刷新~
将函数的返回值保存在一个变量中,如果array
的最后一项是number
,则加1,否则不加1。再次返回那个值。现在,这个值在所有的函数调用中都是向后传递的,如果我们正在查看的数组元素是number
,这个值就会增加。对count(....)
的原始调用返回array
number
的个数。我希望我的解释没有错。 相关文章:
- 具有变量Number of Arguments的std::函数的矢量
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 在打字稿中,如何编写一个函数来处理任意维度数组(例如:<number>Array,Array<Array<number>>,...)?
- 编写一个函数count(number, array, length),计算number在array中出现的次数
- 将 int** 转换为"pointer to a two-dimensional array of integers with fixed number of elements per column"