Ik analyseerde dit probleem eigenlijk per tijdsfactor.
Ik heb 2 eenvoudige implementaties gedaan:
iteratieve:
private static BigInteger bigIterativeFactorial(int x) {
BigInteger result = BigInteger.ONE;
for (int i = x; i > 0; i--)
result = result.multiply(BigInteger.valueOf(i));
return result;
}
En recursief:
public static BigInteger bigRecursiveFactorial(int x) {
if (x == 0)
return BigInteger.ONE;
else
return bigRecursiveFactorial(x - 1).multiply(BigInteger.valueOf(x));
}
Test allebei op één draad.
Het blijkt dat iteratief iets sneller is alleen met kleine argumenten. Toen ik n groter dan 100 plaatste, was de recursieve oplossing sneller.
Mijn conclussie? Je kunt nooit zeggen dat de iteratieve oplossing sneller is dan recursief op JVM. (Nog steeds alleen over tijd praten)
Als je intresse hebt, krijg ik de hele weg HIER
If You're intrested in deeper understanding difference between this 2 approaches, I found really nice description on knowledge-cess.com