2017-09-11 3 views
0

J'ai essayé de faire une fonction qui prend un paramètre, et met chaque nombre moins que le paramètre jusqu'à zéro et le pousse dans un tableau (ordre décroissant). puis utilisé une boucle for pour multiplier chaque index du tableau par l'index suivant, mais mon retour revient null. aidez s'il vous plaît.Factorialiser un nombre en utilisant des tableaux Javascript

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

Vous essayez de multiplier par un tableau . – SLaks

+0

'i' commence à 10, mais vous n'avez pas 10 éléments dans votre tableau. Essayez 'arrayOfFactorial [num-i]' –

+0

Il est inutile d'utiliser le tableau car vous ne le renvoyez même pas. –

Répondre

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

    console.log(factorial); 
    return factorial; 
} 

factorialize(10); 

Je pense que c'est ce que vous essayez de do..i changé le [i] pour i.and arrayOffactorial [i] i

+0

Vous stockez l'index dans le tableau et ne renvoyez rien. –

+0

Je sais que .. Je viens de montrer la façon dont il devrait être fait .. qui a demandé la question a déjà cette déclaration de retour.Alors je sais qu'il est évidemment au courant de tat fait.J'ai juste montré ce qui n'allait pas dans son code – Debabrata

1

dans la première itération, arrayOfFactorial sera de longueur 1, et je serai égal à num qui sera plus de 1, vous essayez d'accéder à arrayOfFactorial[num] qui sera indéfini et c'est pourquoi vous obtenez NaN. vous pouvez simplement multiplier factorielle avec i. De plus, vous n'avez pas vraiment besoin d'un autre tableau pour cela.

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-Vous poussent un tableau dans arrayOfFactorial, puis essayer de multiplier un nombre avec un tableau. Bien qu'il soit légitime en maths, il n'est pas en javascript. Vous devez utiliser arrayOfFactorial.push(i);

2-Vous n'avez pas besoin d'une matrice. Vous pouvez simplement utiliser factorial = factorial * i

3-Selon votre explication, vous devez utiliser 2 boucles. La deuxième action, devrait être dans une boucle différente.

4-Vous retournez quelque chose, mais vous ne l'imprimez pas.

Voir la réponse Dij si vous ne pouvez pas résoudre le problème.

0

Le tableau dans votre cas n'est pas utilisé pour le calcul. Qu'est-ce que vous essayez de faire est probablement ceci:

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)); 

Cela dit, il n'y a pas de véritable point de le faire en tant que votre utilisation de la mémoire va croître avec la taille de la factoriel que vous essayez de calculer et vous n » Je n'ai vraiment pas besoin de garder la référence de tout. Le meilleur moyen serait de le calculer en multipliant le factoriel directement dans la boucle for. Comme ceci:

function factorialize(num) { 
    var factorial = 1 

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

    return factorial; 
} 
0

Je pense en utilisant une boucle while facilite, et vous n'avez pas besoin de créer un tableau.

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

 
console.log(factorialize(10));

Si vous insistez sur l'utilisation d'un tableau, une version utilisant l'opérateur de diffusion ES6 pourrait être

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

 
console.log(factorialize(10));