Простой рекурсивный для итеративного

#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;
}