Преобразование рекурсивного метода в итерацию

Не раз уже слышал, что итерация - всегда производительнее, чем рекурсия, а также о том, что они взаимозаменяемы. Есть ли возможность как-то преобразовать этот код в итеративный, а главное - даст ли это прирост производительности?

public static int calculate(Foo f){
    int hash = 0;
    t = f.getType();
    hash += t;
    switch (t) {
        case 1:
            FooMap fm = (FooMap) f;

            Set<String> keys = fm.keys();

            for (String name : keys)
                hash += name.hashCode() ^ calculate(fm.getValue(name));

            return hash;
        case 2:
            return hash + f.hashCode();
        default:
            return hash;
    }
}

Pss: FooMap#getValue в данном случае возвращает Foo, то есть в объекте могут находиться вложенные элементы (как в Json), что, собственно, и делает на вид преобразование кода в итеративный невозможным. Сам по себе метод очень часто вызывается, по этому даже если разница во времени очень важна.

Если данный пример можно преобразовать в итеративный вариант - пожалуйста, подскажите как. Заранее спасибо!


Ответы (0 шт):