0

メソッドは次のとおりです。

public static zeroCount(int num)

私のインストラクターは、このメソッドに 1 つの int パラメーターを持たせ、再帰メソッドは num にゼロの数を返す必要があると要求しています。

したがって、zeroCount(10200) = 3、および zeroCount(100300) = 4 など...

これは簡単にできますが、再帰的な方法を使用する必要があるため、完全に失われます。

4

4 に答える 4

2

ヒント: 各再帰ステップで数値を 10 で割り続け、余りがなければ 1 を返し、余りがある場合は 0 を返すとどうなるでしょうか?

于 2012-11-01T00:54:05.783 に答える
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; をインポートする必要があります。

于 2012-11-01T01:38:07.867 に答える
0

問題に反復的に (つまり、ある種のループを使用して) 取り組むことができる場合は、再帰的に行うことができます。

再帰的メソッドを書くときに必要なものは次の 2 つです。

  • 基本ケース; 番号のすべての桁を使い果たしたときに何をするか、および
  • 反復ケース; まだ桁数が残っているときに何をするか。

また、メソッドの戻り値を指定していないことにも気付きました。理想的には、intです。それがあなたのヒントになりますように。

于 2012-11-01T00:59:00.357 に答える
0

次のことを試してください。

public int count0(int n) {
  if(n == 0) 
     return 0;
  if(n % 10 == 0) 
     return 1 + count0(n/10);

  return count0(n/10);
} 
于 2013-12-03T15:49:50.463 に答える