J'ai écrit le code Java ci-dessous pour calculer la factorielle des nombres de 1 à 30 récursivement. Pour une raison quelconque, la sortie ne correspond pas au results here pour les nombres supérieurs à 20. Je suis surpris de voir aussi des nombres négatifs.La fonction récursive pour calculer les échecs factoriels après 20
code
class Test {
public static Long factorial(Long number) {
if(number == 1){
return 1L;
}else{
return number*factorial(number-1);
}
}
public static void main(final String... arguments){
for(Long number=1L;number<=30;number++){
System.out.println("Factorial of " + number + " : " + factorial(number));
}
}
}
Sortie
Factorial of 1 : 1
Factorial of 2 : 2
Factorial of 3 : 6
Factorial of 4 : 24
Factorial of 5 : 120
Factorial of 6 : 720
Factorial of 7 : 5040
Factorial of 8 : 40320
Factorial of 9 : 362880
Factorial of 10 : 3628800
Factorial of 11 : 39916800
Factorial of 12 : 479001600
Factorial of 13 : 6227020800
Factorial of 14 : 87178291200
Factorial of 15 : 1307674368000
Factorial of 16 : 20922789888000
Factorial of 17 : 355687428096000
Factorial of 18 : 6402373705728000
Factorial of 19 : 121645100408832000
Factorial of 20 : 2432902008176640000
Factorial of 21 : -4249290049419214848
Factorial of 22 : -1250660718674968576
Factorial of 23 : 8128291617894825984
Factorial of 24 : -7835185981329244160
Factorial of 25 : 7034535277573963776
Factorial of 26 : -1569523520172457984
Factorial of 27 : -5483646897237262336
Factorial of 28 : -5968160532966932480
Factorial of 29 : -7055958792655077376
Factorial of 30 : -8764578968847253504
Quelqu'un pourrait-il s'il vous plaît aidez-moi à calculer factoriel jusqu'à 30 correctement?
Levez les yeux vers débordement ... – brso05
Ceci est un problème de débordement d'entier. Essayez d'utiliser BigInteger. – luizfzs
Vous avez un cas de débordement en cours. – Chris