带递归的幂函数 - java

时间:2014-05-04 20:54:14

标签: java recursion

这里是Math.Pow类的工作递归功能函数:

public class Powers {
    public static long pow(long x, long p) {
        if (p == 0) {
            return 1;
        }
        if (p % 2 == 0) {
            long a = pow(x, (p / 2));
            return a * a; //This line
        } else {
            long a = pow(x, ((p - 1) / 2));
            return x * a * a; //This line
        }
    }
}

如果我通过将上面提到的行更改为return pow(a, 2)return x * pow(a, 2)来尝试变得聪明并尽可能多地使用递归,则会出现堆栈溢出错误。我知道它应该会导致对pow的更多调用,但我认为它不应该像它看起来那样循环。任何人都可以解释我吗?感谢

2 个答案:

答案 0 :(得分:1)

执行此操作,您将获得以下一系列调用:

pow(a, 2) -> pow(a, 1) -> pow(a, 0) -> pow(1, 2) -> pow(1, 1) -> pow(1, 0) -> pow(1, 2) -> ...

答案 1 :(得分:0)

您应该使用某个IDE调试它,或者只是在方法的开头添加一些表达式:

public static long pow(long x, long p) {
    System.out.println ("x = " + x + ", p = " + p);
    ...

然后,读取输出,它将包含pow

的调用序列
相关问题