2012-11-08 27 views
0

可以通過遞歸方法來計算整數中的零的數量,該方法接受一個int參數並返回該參數具有的零的數量。寫一個計算零的遞歸函數

所以:

zeroCount(1000) 

將返回:

3 

您可以從一個整數去掉最後一位數字做: 「10分之12345」= 1234

你可以得到最後一位數字來自一個整數:「12345%10」= 5

這就是我到目前爲止:

public static int zeroCount(int num) 
{ 
    if(num % 10 == 0) 
     return num; 
    else 
     return zeroCount(num/10); 
} 

有沒有人有任何建議或想法來幫助我解決這個功能?通過在你的頭上你的代碼

+1

基本情況錯誤。 「x%10」爲0的值很多(模數運算可能應該摺疊到遞歸情況中。) – 2012-11-08 05:23:44

回答

5

運行:

zeroCount(1000) 

1000 % 10 == 0,所以你要返回1000。這沒有意義。


就流行過每一個數字,並重復:

這聽起來像功課,所以我會離開實際的代碼給你,但它可以做到:

zeroes(0) = 1 
zeroes(x) = ((x % 10 == 0) ? 1 : 0) + zeroes(x/10) 

注沒有終止條件,它可以永久遞歸。

0

您必須從if和else中調用遞歸函數。此外,你失蹤基本情況: -

public static int zeroCount(int num) 
{ 
    if(num % 10 == 0) 
     return 1 + zeroCount(num/10); 
    else if (num/10 == 0) 
     return 0; 
    else 
     return zeroCount(num/10); 
} 
+2

這裏沒有基本情況。無限遞歸! – 2012-11-08 05:25:10

+1

這將導致一個'StackOverflowException'。退出標準缺失。(OP可以找到解決辦法,只是爲了讓他知道;)) –

+0

@Andreas_D ..是的,我在最後一行中引用了這一點。 :) –

3
public static int zeroCount(int num) 
{ 
    if(num == 0) 
     return 0; 

    if(num %10 ==0) 
     return 1 + zeroCount(num/10); 
    else 
     return zeroCount(num/10); 
} 

這會工作

+0

非常感謝,現在我會嘗試計算我自己的任何數字的數量。 –

+0

發生了某些無法解釋的事情,我試圖將此遞歸方法分解成單獨的部分以查看它是如何工作的。當方法開始並且num = 1230005時,如果(num/10!= 0)爲真,則它向下移動到下一個if語句:if(num%10 == 0)和1230005%10等於0.5技術上是0,因爲它是一個int而不是double。但即使num%10(1230005%10)等於0,它也不會返回1 + zeroCount(num/10),而是直接返回else。我在這裏錯過了什麼?當該語句爲真時,它如何跳過「if(num%10 == 0)」? –

0

這是一個簡單的問題,你不需要去遞歸 我認爲更好的辦法是整數轉換爲字符串,並檢查字符「0」

public static int zeroCount(int num) 
{ 
String s=Integer.toString(num); 
int count=0; 
int i=0; 
for(i=0;i<s.length;i++) 
{ 
if(s.charAt(i)=='0') 
{ 
count++; 
} 
} 
return count; 
} 
0

你知道x%的10給你x的最後一位,這樣你就可以用它來標識爭取零。此外,在檢查某個特定數字是否爲零之後,您想要取出該數字,如何? 除以10

public static int zeroCount(int num) 
{ 
    int count = 0; 

    if(num == 0) return 1;     // stop case zeroCount(0) 
    else if(Math.abs(num) < 9) return 0; // stop case digit between 1..9 or -9..-1 
    else 
    { 
    if (num % 10 == 0) // if the num last digit is zero 
     count++; // count the zero, take num last digit out 

    return count + zeroCount(num/10); // take num last digit out, and apply 
    } // the method recursively to the remaining digits 
} 

我使用math.Abs​​來允許負數,你必須導入java.lang.Math;