Преобразование рекурсивного метода в итерацию
Не раз уже слышал, что итерация - всегда производительнее, чем рекурсия, а также о том, что они взаимозаменяемы. Есть ли возможность как-то преобразовать этот код в итеративный, а главное - даст ли это прирост производительности?
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), что, собственно, и делает на вид преобразование кода в итеративный невозможным. Сам по себе метод очень часто вызывается, по этому даже если разница во времени очень важна.
Если данный пример можно преобразовать в итеративный вариант - пожалуйста, подскажите как. Заранее спасибо!