2017-09-11 19 views
0

Ich habe versucht, eine Funktion, die einen Parameter nimmt, und setzt jede Zahl kleiner als der Parameter auf Null und schiebt es in ein Array (absteigend). und benutzte dann eine for-Schleife, um jeden Index des Arrays mit dem nächsten Index zu multiplizieren, aber meine Rückkehr kommt auf null zurück. bitte hilfe.Faktorisieren Sie eine Zahl mit Javascript-Arrays

function factorialize(num) { 
    var arrayOfFactorial = []; 
    var factorial = 1; 
    for(var i = num;i > 0;i--){ 
     arrayOfFactorial.push([i]); 
     factorial = factorial * arrayOfFactorial[i]; 
    } 

    return factorial; 
} 

factorialize(10); 
+0

sein Sie versuchen, von einem Array zu multiplizieren . – SLaks

+0

'i' beginnt um 10, aber Sie haben nicht 10 Elemente in Ihrem Array. Versuchen Sie 'arrayOfFactorial [num - i]' –

+0

Es gibt keinen Grund, das Array zu verwenden, da Sie es nicht einmal zurückgeben. –

Antwort

0
function factorialize(num) { 
    var factorial = 1; 
    for(var i = num;i > 0;i--){ 
     factorial = factorial * i; 
    } 

    console.log(factorial); 
    return factorial; 
} 

factorialize(10); 

Ich denke, das ist das, was Sie versuchen, die [i] do..i geändert arrayOffactorial i.and [i] i

+0

Sie speichern den Index im Array und geben nichts zurück. –

+0

Ich weiß, dass .. Ich zeigte nur die Art und Weise, wie es getan werden sollte..wurde die Frage bereits gestellt haben, dass Rückkehr Aussage.So weiß ich, dass er off Tat Tatsache bewusst ist.so habe ich nur gezeigt, was in seinem Code falsch war – Debabrata

1

in der ersten Iteration wird arrayOfFactorial sein von der Länge 1, und ich werde gleich num sein, das mehr als 1 sein wird, versuchen Sie, auf arrayOfFactorial[num] zuzugreifen, der undefined sein wird, und deshalb erhalten Sie NaN. Sie können factorial einfach mit i multiplizieren. Auch brauchen Sie dafür kein weiteres Array.

function factorialize(num) { 
 
    var arrayOfFactorial = []; 
 
    var factorial = 1; 
 
    for(var i = num;i > 0;i--){ 
 
    arrayOfFactorial.push([i]); //can be removed. 
 
    factorial = factorial * i; 
 
    } 
 

 
    return factorial; 
 
} 
 

 
console.log(factorialize(10));

0

1-Du ein Array in arrayOfFactorial, Schieben und dann eine Zahl mit einem Array zu multiplizieren versuchen. Während es in Mathematik legal ist, ist es nicht in Javascript. Sie sollten arrayOfFactorial.push(i); verwenden

2-Sie benötigen kein Array. Sie können einfach verwenden factorial = factorial * i

3-Nach Ihrer Erklärung sollten Sie 2 Schleifen verwenden. Die zweite Aktion sollte sich in einer anderen Schleife befinden.

4-Sie geben etwas zurück, drucken es jedoch nicht.

Siehe die Antwort von Dij, wenn Sie das Problem nicht beheben können.

0

Das Array in Ihrem Fall wird nicht für die Berechnung verwendet. Was Sie versuchen, dies zu tun, ist wahrscheinlich:

function factorialize(num) { 
    var arrayOfFactorial = []; 

    // Push all values in the array (order not really important here) 
    for(var i = num;i > 0; i--){ 
    arrayOfFactorial.push(i); 
    } 

    var factorial = 1; 
    for(var i = 0; i<arrayOfFactorial.length; i++) { 
    factorial = arrayOfFactorial[i] * factorial 
    } 

    return factorial; 
} 

console.log(factorialize(10)); 

Das heißt, es gibt keinen wirklichen Punkt zu tun, dass als Speichernutzung mit der Größe der Fakultäts wachsen Sie versuchen, zu berechnen und Sie don‘ t muss wirklich Bezug auf alles behalten. Der beste Weg wäre, sie zu berechnen, indem man die Fakultät direkt in der for-Schleife multipliziert. Wie folgt aus:

function factorialize(num) { 
    var factorial = 1 

    for(var i = num;i > 0; i--){ 
    factorial = factorial * i 
    } 

    return factorial; 
} 
0

denke ich mit einem while Schleife macht es einfacher, und Sie brauchen sich nicht um ein Array zu erstellen.

function factorialize(num) { 
 
    let res = 1; 
 
    while (num > 0) res *= num--; 
 
    return res; 
 
}; 
 

 
console.log(factorialize(10));

Wenn Sie darauf bestehen, ein Array über die Verwendung, eine Version es6 Spread-Operator könnte

function factorialize(num) { 
 
    return [...Array(num).keys()] 
 
    .reduce((a, b) => a * (b + 1), 1) 
 
} 
 

 
console.log(factorialize(10));

Verwandte Themen