Wenn Sie ein Ergebnis aus einer rekursiven Funktion wollen, alle Codepfade durch die Funktion muss etwas zurückgeben. Ihr Code gibt im Fall num!=1
nichts zurück. Es sollte das Ergebnis des Anrufs selbst zurückgeben, z. (Siehe ***
Linie):
var fact=5;
function calfact(num)
{
if(num!=1)
{
fact=fact*(num-1);
num=num-1;
return calfact(num); // ***
}
else
{
return fact;
}
}
Ihre Funktion eine globale Variable verwendet, die keine gute Idee ist, da es bedeutet, dass die funtion ist nicht in sich geschlossen; und nicht um eine echte Fakultäts-Funktion, da Sie effektiv verwenden zwei Eingänge (fact
— die globalen und num
, das Argument)
Wenn Sie ein echtes faktorielles wollen, müssen Sie nicht eine globale Variable benötigen, nur Arbeit aus dem Argumente selbst:
function factorial(num) {
if (num < 0) {
throw new Error("num must not be negative");
}
if (num <= 1) {
// Both 1! and 0! are defined as 1
return 1;
}
return num * factorial(num - 1);
}
console.log(factorial(5)); // 120
Oder natürlich, kompakten:
function factorial(num) {
if (num < 0) {
throw new Error("num must not be negative");
}
return num <= 1 ? 1 : num * factorial(num - 1);
}
(Mehr über 0 !: https://en.wikipedia.org/wiki/Factorial)
if (num! = 1) gibt die Funktion nichts zurück (undefiniert) –