java中的递归,哪一个可能是最好的?

时间:2016-06-28 03:24:48

标签: java recursion

public class a1 {

    private static int unit = 0;

    private static int sum = 0;

    public static void main(String[] foo) {
        unit = 10;
        System.out.println(tailRecur(unit));

        System.out.println(tailRecur2(10));
    }

    public static int tailRecur(int result) {
        int sum = result + unit - 1;
        unit = unit - 1;
        if (unit == 0) {
            return sum;
        }
        return tailRecur(sum);
    }

    public static int tailRecur2(int unit) {
        if (unit == 0) return sum;
        sum = sum + unit;
        return tailRecur2(unit - 1);
    }
}

我写了一个简单的方法来实现1 + ... + 10。我不确定哪个更适合递归语法的含义。这些都给了我正确的答案。

1 个答案:

答案 0 :(得分:3)

存储静态变量是不必要的,因此任何一种解决方案都不理想。

尝试这样思考

  1. 你想做什么?答案:1+...+N

  2. 输入是什么?答案:N,总和的最高数字。

  3. 您可以在递归的每个步骤中做些什么来帮助您通过该输入获得答案?答案:获取该数字并将其添加到所有N - 1解决方案的结果中。

  4. 什么时候应该停止递归并开始累积求和结果(你的基本情况是什么)?答案:当数字达到1(通常是可能的最小输入),或者甚至小于它时,以防止负数输入引起StackOverflow错误。

  5.   

    public static int sumUpTo(int x) { if (x <= 1) return x; return x + sumUpTo(x - 1); }