使用局部var计数的递归函数

时间:2011-12-18 22:10:38

标签: 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);
    }
  }

这个功能就像一个魅力,但我的问题是,我可以在没有名为sum的静态int的情况下制作吗?   有没有办法可以在函数中定义一个整数和,让它们用局部变量计算或者不可能?

亲切的问候,

5 个答案:

答案 0 :(得分:6)

当然:

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

答案 1 :(得分:4)

static int totalNumbers(int a)
{
    return a < 10 ? a : (a % 10) + totalNumbers(a / 10);
}

答案 2 :(得分:2)

当然:

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);
}

这个版本是尾递归的,但是它没有给你任何Java语言。

答案 3 :(得分:1)

当然可以!

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));

明白我的意思?

答案 4 :(得分:1)

当然,没有静态“sum”变量更好。我会用这样的方式写它:

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

    return a%10 + totalNumbers(a/10);
 }