Java 使用局部变量计数的递归函数

Java 使用局部变量计数的递归函数,java,recursion,Java,Recursion,我有一个关于递归函数的问题 我制作了一个小的示例程序,它计算整数中的各个数字: 例如:123=6,因为1+2+3=6 现在我用一个静态int和这个递归函数实现了它: static int totalNumbers(int a) { if(a <= 0) return sum; else { sum += a % 10; return totalNumbers(a/10); } } 静态整数总数(整数a) {

我有一个关于递归函数的问题

我制作了一个小的示例程序,它计算整数中的各个数字: 例如:123=6,因为1+2+3=6

现在我用一个静态int和这个递归函数实现了它:

  static int totalNumbers(int a)
  { 
    if(a <= 0)
      return sum;
    else
    {
      sum += a % 10;
      return totalNumbers(a/10);
    }
  }
静态整数总数(整数a)
{ 
如果(a当然:

static int totalNumbers(int a)
  { 
    if(a <= 0)
      return 0;
    else
    {
      return (a % 10) + totalNumbers(a/10);
    }
  }
static int totalNumbers(int a, int sum)
{ 
  if(a <= 0)
    return sum;
  else
  {
    return totalNumbers(a/10, sum + a % 10);
  }
}

static int totalNumbers(int a) {
  return totalNumbers(a, 0);
}
静态整数总数(整数a)
{ 
如果(a
静态整数总数(int a)
{
返回a<10?a:(a%10)+总数(a/10);
}
当然可以

public static int totalNumbers(int a) {
    if (a == 0)
        return 0;
    return (a % 10) + totalNumbers(a / 10);
}
通过使用静态int属性,您缺少递归函数的点,这是一个最纯粹的数学意义上的函数,不依赖于外部值,并且您可以确定,每次使用相同的输入调用它时,它都将返回相同的输出—这是您无法对方法说的,它将给出不同的结果每次使用相同的输入调用它时,除非在调用之间手动将外部静态int属性重置为零

例如,尝试连续两次或多次调用您的实现,如下所示:

System.out.println(totalNumbers(123));
System.out.println(totalNumbers(123));
System.out.println(totalNumbers(123));
明白我的意思吗?

当然:

static int totalNumbers(int a)
  { 
    if(a <= 0)
      return 0;
    else
    {
      return (a % 10) + totalNumbers(a/10);
    }
  }
static int totalNumbers(int a, int sum)
{ 
  if(a <= 0)
    return sum;
  else
  {
    return totalNumbers(a/10, sum + a % 10);
  }
}

static int totalNumbers(int a) {
  return totalNumbers(a, 0);
}
静态整数总数(整数a、整数和)
{ 

如果(a确定,最好不要使用静态“sum”变量。我会这样写:

 static int totalNumbers(int a) {
    if (a <= 0) return 0;

    return a%10 + totalNumbers(a/10);
 }
静态整数总数(整数a){

如果(a为什么
其他
如果你
返回
?;)谢谢:-)这么简单,但没有看到它。学到了一些新东西!