メソッドは次のとおりです。
public static zeroCount(int num)
私のインストラクターは、このメソッドに 1 つの int パラメーターを持たせ、再帰メソッドは num にゼロの数を返す必要があると要求しています。
したがって、zeroCount(10200) = 3、および zeroCount(100300) = 4 など...
これは簡単にできますが、再帰的な方法を使用する必要があるため、完全に失われます。
ヒント: 各再帰ステップで数値を 10 で割り続け、余りがなければ 1 を返し、余りがある場合は 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; をインポートする必要があります。
問題に反復的に (つまり、ある種のループを使用して) 取り組むことができる場合は、再帰的に行うことができます。
再帰的メソッドを書くときに必要なものは次の 2 つです。
また、メソッドの戻り値を指定していないことにも気付きました。理想的には、int
です。それがあなたのヒントになりますように。
次のことを試してください。
public int count0(int n) {
if(n == 0)
return 0;
if(n % 10 == 0)
return 1 + count0(n/10);
return count0(n/10);
}