2013-05-29 48 views
1

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

这个问题是复制一个字,但我有几个关于这个问题的问题。如果你可以发表评论,指出大概有以下您的意见,那将是很好:

  1. 好吧,我需要一个array长度为length,我做我保存自己的号码的位置?还是我生成随机整数去插槽?
  2. 另外,我有正确的计划吗?我的计划是:

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

现在我试图通过它自己说话,现在我更加困惑了。也许我只是让问题更加困难。任何提示将有所帮助。谢谢

+0

1'array'是输入的问题,这样你就可以伪造一个,像做了什么segfolt,也可以生成随机整数,你可能会得到0作为输出。 2.如果你改变了调用'计数您的解决方案可能工作(INT数,INT * new_array,INT new_length)',其中'new_array'点,你会发现一个'number',以及之后的下一个元素'new_length'等于从'new_array'到'array'结尾的长度。但我认为segfolt的代码作为递归解决方案更为清晰。 – cxyzs7

回答

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 
+0

这比我制作它容易得多。虽然这本书没有得到指示,但它是如此简单。谢谢。 –

+0

@Maurice阿布尼:很高兴我能帮助:) –

+2

@MauriceAbney:如果你不使用数组指针要浪费时间,你可以做以下代替:'诠释计数(INT NUM,INT *改编,诠释长度) (!长度) \t \t \t return 0;如果(!长度) \t \t \t返回0; \t \t INT C =计数(NUM,ARR,--length); \t \t返回ARR [长度] == NUM​​? c + 1:c; \t}' – Mac

0
  1. 要测试是否你的函数是正确的,是的,你可以在阵列中使用自己的号码。该算法的工作非常重要。
  2. 不,你的方法是错误的。递归有两个部分:

一)你知道什么

B中的条款)有关,如果你改变你有什么,你可以知道什么条款。

所以你的情况的功能count(.....)首先应了解该length是否为0,因为这样的数量numberarray 0次。如果不是,则需要使用number作为号码(因为您仍然要计数相同的号码)作为array,除了阵列的最后一个元素和length-1以外。这递归铲阵列,直到它没有更多的项目。

〜短暂的休息,让大脑刷新〜

你应该保存在变量函数的返回值,事后加1如果array最后一个项目是number,否则不是。并再次返回该值。现在,这个值是通过所有的函数调用向后传递和增加,如果我们看arrayelement是numbercount(....)原来的电话号码number返回array

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

相关问题