首页 文章

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

提问于
浏览
2

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

我已经制作了这个小例子程序来计算整数中的单个数字:例如: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的情况下制作它吗?有没有办法可以在函数中定义一个整数和,让它们用本地var计算或者不可能?

亲切的问候,

5 回答

  • 4

    当然:

    static int totalNumbers(int a)
      { 
        if(a <= 0)
          return 0;
        else
        {
          return (a % 10) + totalNumbers(a/10);
        }
      }
    
  • 1
    static int totalNumbers(int a)
    {
        return a < 10 ? a : (a % 10) + totalNumbers(a / 10);
    }
    
  • 6

    当然:

    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 .

  • 2

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

    static int totalNumbers(int a) {
        if (a <= 0) return 0;
    
        return a%10 + totalNumbers(a/10);
     }
    
  • 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));
    

    明白了吗?

相关问题