Hallo Tom,
Eine Alternative zum Abfangen eines Fehlers ist ja immer die Prognose eines Fehlers, man kann also so etwas machen:
function factorial(x) {
var result = 1;
var limit = Math.pow(2, 32) - 1; // Oder was auch immer das Limit ist, evtl. gibt es da auch eine Konstante
for (var i = 2; i <= x; ++i) {
if (i >= limit) {
return 0; // Fehler
}
limit /= i;
result *= i;
}
return result;
}
Das Programm beruht auf der Idee, dass a * b < c => a < c/b (für b > 0).
Man muss evtl. noch darüber nachdenken, welche Rolle die Verwendung der Integer-Division spielt. Außerdem kann man in diesem Fall natürlich einfach das Limit für x statisch ausrechnen, was sicher sinnvoller ist.
Grüße
Daniel