我正在编写一个实例方法来计算自然数的幂。如果功率是偶数的话,我正在使用快速供电方法,例如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);
}
}
}
答案 0 :(得分:3)
问题是这段代码:
else if (p > 1) {
this.power(p);
}
如果p
大于1,则递归调用函数而不对p
进行任何修改。在下面的执行中,将输入相同的if并再次调用该函数。重复直到溢出。