具有递归的快速供电方法

时间:2015-06-25 20:18:11

标签: java recursion

我正在编写一个实例方法来计算自然数的幂。如果功率是偶数的话,我正在使用快速供电方法,例如base ^ power =(base ^ power / 2)^ power / 2,否则base ^ power = base *(base ^ power / 2)^ power / 2。我的代码导致溢出错误。

这是我的代码:

 @Override
public void power(int p) {
    assert p >= 0 : "Violation of: p >= 0";

    // TODO - fill in body
    NaturalNumber one = new NaturalNumber1L(1);
    if (p == 0) {
        this.copyFrom(one);
    } else if (p > 1) {
        this.power(p);
    }

    if (p > 1) {
        if (p % 2 == 0) {
            this.power(p / 2);
            this.multiply(this);
        } else {
            this.multiply(this);
            this.power((p - 1) / 2);
            this.multiply(this);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

问题是这段代码:

else if (p > 1) {
    this.power(p);
}

如果p大于1,则递归调用函数而不对p进行任何修改。在下面的执行中,将输入相同的if并再次调用该函数。重复直到溢出。