2013-05-29 65 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

我希望我的解釋沒有失敗。

相關問題