Sto provando a scrivere un programma Java per calcolare un fattoriale di un numero elevato. Sembra che BigInteger
non sia in grado di contenere un numero così grande.StackOverflowError computing factorial di un BigInteger?
Il seguente è il codice (semplice) che ho scritto.
public static BigInteger getFactorial(BigInteger num) {
if (num.intValue() == 0) return BigInteger.valueOf(1);
if (num.intValue() == 1) return BigInteger.valueOf(1);
return num.multiply(getFactorial(num.subtract(BigInteger.valueOf(1))));
}
Il numero massimo il programma di cui sopra maniglie in 5022, dopo che il programma getta un StackOverflowError
. Ci sono altri modi per gestirlo?
Questo non può essere il più grande per i tipi di dati BigInteger. Dove viene generata l'eccezione StackOverflow? Pubblica un codice più pertinente. – JonH
Sì, utilizzare l'algoritmo iterativo. BigInteger sta andando bene, getFactorial ha appena mangiato tutto lo stack space. – harold
@harold (+1) - un altro esempio del perché ritengo che la ricorsione sia una tecnica dannosa per insegnare agli studenti universitari, almeno nelle lingue senza ricorsione a coda. È un esercizio intellettuale, ma alla fine non è utile per qualcosa di interessante. – CPerkins