#java #recursion #iteration
#java #рекурсия #итерация
Вопрос:
Я думаю, что мое решение слишком сложное, как я могу его упростить?
Проблема:
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);
}
Ответ №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;
}