0

方法是:

public static zeroCount(int num)

我的导师要求这个方法有一个 int 参数,递归方法必须返回 num 中的零个数。

所以 zeroCount(10200) = 3 和 zeroCount(100300) = 4 等等...

我可以很容易地做到这一点,但因为我需要使用递归方法,所以我完全迷路了。

4

4 回答 4

2

提示:如果你在每个递归步骤中将数字除以 10,如果没有余数则返回 1,如果有余数则返回 0?

于 2012-11-01T00:54:05.783 回答
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 回答
0

如果您可以迭代地解决问题(即使用某种循环),那么您可以递归地解决问题。

编写递归方法时需要做的两件事是:

  • 一个基本案例;当你用尽你的号码的所有数字时你会做什么,以及
  • 一个迭代案例;当您还有更多数字要走时,您会做什么。

我还注意到您没有指定方法的返回值;理想情况下,它会是int. 让它成为你的提示。

于 2012-11-01T00:59:00.357 回答
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 回答