2012-11-26 31 views
1

該函數獲取一個整數和一個數字,並且如果該數字在整數中出現偶數次數,則返回true 或false如果不。一個布爾遞歸函數,用於判斷一個數字是否出現在偶數次的整數中

例如:

如果digit=1num=1125 函數應該返回true

如果digit=1num=1234 函數應返回false

bool isEven(int num, int dig) 
{ 
    bool even; 

    if (num < 10) 
     even = false; 
    else 
    { 
     even = isEven(num/10,dig); 

這是我這麼遠,我卡住... 這是功課,所以請不要寫答案,但暗示我,幫我找到它由我自己。

+0

嘆息......無法弄清楚如何正確編輯代碼 – Quaker

回答

1

要設置遞歸,你需要弄清楚兩件事情:

  1. 基本情況。什麼是你可以直接處理的簡單情況?例如,你可以輕鬆處理單位數字嗎?
  2. 將所有其他案件減少到基本案例的規則。例如,您是否可以切掉最後一位數字,並以某種方式將解決方案中的重新部分編號轉換爲完整編號的解決方案?

我可以從你的代碼中看到你在這兩點上都取得了一些進展。但是,兩者都不完整。首先,你永遠不會在你的代碼中使用目標數字。

+0

我不明白我是否應該計算出現次數並最終確定它是否是偶數,或者是否有布爾變量每次功能識別數字時更改它的值 – Quaker

+0

無論哪種方式都可以工作。做任何你認爲更容易做到的事。 – NPE

1

表達式num%10會給你一個數字的最後一位數字,這應該有所幫助。

您的基本情況不正確,因爲一個數字可以有偶數個匹配(零是偶數)。你的遞歸情況也需要工作,因爲你需要反轉每個匹配的答案。

+0

0不是一個有效的輸入,因爲整數必須是自然數(我們排除0的自然數) – Quaker

+1

您不明白。我指的是零作爲可能的匹配數量,而不是輸入。例如:num = 1234,dig = 5。挖掘出現零次,這是偶數。 –

+0

對..謝謝:-) – Quaker

相關問題