简单递归到迭代

时间:2019-03-15 01:49:47

标签: java recursion iteration

我认为我的解决方案太复杂了,如何简化呢?

问题:

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 个答案:

答案 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;
}
相关问题