我认为我的解决方案太复杂了,如何简化呢?
问题:
public static int calc (int g, int h) {
if (h > 5) {
g += h;
return calc (g, h − 2) ∗ 2;
} else {
return g;
}
}
我的解决方案:
public static int calc (int g, int h) {
int counter = 0;
for (; h > 5; h -= 2){
g += h;
counter++;
}
return g * (int) Math.pow(2, counter);
}
答案 0 :(得分:1)
我更倾向于简化您的原始递归代码:
public static int calc(int g, int h) {
if (h <= 5) {
return g;
}
return 2 * calc(g + h, h - 2);
}
但是,如果我要简化您的迭代代码,我会尽量避免引入浮点数Math.pow()
并保留整个操作int
:
public static int calc(int g, int h) {
int power;
for (power = 1; h > 5; h -= 2) {
g += h;
power *= 2;
}
return g * power;
}