Trois façons de factoriser un nombre en JavaScript

Cet article est basé sur le script d'algorithme de base de Free Code Camp "Factorialiser un nombre"

En mathématiques , la factorielle d'un entier non négatif n peut être un algorithme délicat. Dans cet article, je vais expliquer trois approches, la première avec la fonction récursive, la seconde en utilisant une boucle while et la troisième en utilisant une boucle for.

Nous avons déjà vu une approche récursive sur une chaîne dans l'article précédent, Comment inverser une chaîne en JavaScript de 3 manières différentes? Cette fois, nous appliquerons le même concept sur un nombre.

Défi algorithme

Renvoie la factorielle de l'entier fourni.

Si l'entier est représenté par la lettre n, une factorielle est le produit de tous les entiers positifs inférieurs ou égaux à n.

Les factorielles sont souvent représentées avec la notation abrégée n!

Par exemple: 5! = 1 * 2 * 3 * 4 * 5 = 120

 function factorialize(num) { return num; } factorialize(5);

Cas de test fournis

  • factorialize (0) doit renvoyer 1
  • factorialize (5) doit renvoyer 120
  • factorialize (10) doit renvoyer 3628800
  • factorialize (20) doit renvoyer 2432902008176640000

Qu'est-ce que la factorisation d'un nombre?

Lorsque vous factorialisez un nombre, vous multipliez ce nombre par chaque nombre consécutif moins un.

Si votre nombre est 5, vous auriez:

5! = 5 * 4 * 3 * 2 * 1

Le modèle serait:

0! = 1 1! = 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1

1. Factorialiser un nombre avec récursivité

function factorialize(num) { // If the number is less than 0, reject it. if (num < 0) return -1; // If the number is 0, its factorial is 1. else if (num == 0) return 1; // Otherwise, call the recursive procedure again else { return (num * factorialize(num - 1)); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: num === "?" num * factorialize(num - 1) 1st call – factorialize(5) will return 5 * factorialize(5 - 1) // factorialize(4) 2nd call – factorialize(4) will return 4 * factorialize(4 - 1) // factorialize(3) 3rd call – factorialize(3) will return 3 * factorialize(3 - 1) // factorialize(2) 4th call – factorialize(2) will return 2 * factorialize(2 - 1) // factorialize(1) 5th call – factorialize(1) will return 1 * factorialize(1 - 1) // factorialize(0) Second part of the recursion method The method hits the if condition, it returns 1 which num will multiply itself with The function will exit with the total value 5th call will return (5 * (5 - 1)) // num = 5 * 4 4th call will return (20 * (4 - 1)) // num = 20 * 3 3rd call will return (60 * (3 - 1)) // num = 60 * 2 2nd call will return (120 * (2 - 1)) // num = 120 * 1 1st call will return (120) // num = 120 If we sum up all the calls in one line, we have (5 * (5 - 1) * (4 - 1) * (3 - 1) * (2 - 1)) = 5 * 4 * 3 * 2 * 1 = 120 */ } } factorialize(5);

Sans commentaire:

function factorialize(num) { if (num < 0) return -1; else if (num == 0) return 1; else { return (num * factorialize(num - 1)); } } factorialize(5);

2. Factorialiser un nombre avec une boucle WHILE

function factorialize(num) { // Step 1. Create a variable result to store num var result = num; // If num = 0 OR num = 1, the factorial will return 1 if (num === 0 || num === 1) return 1; // Step 2. Create the WHILE loop while (num > 1) { num--; // decrementation by 1 at each iteration result = result * num; // or result *= num; /* num num-- var result result *= num 1st iteration: 5 4 5 20 = 5 * 4 2nd iteration: 4 3 20 60 = 20 * 3 3rd iteration: 3 2 60 120 = 60 * 2 4th iteration: 2 1 120 120 = 120 * 1 5th iteration: 1 0 120 End of the WHILE loop */ } // Step 3. Return the factorial of the provided integer return result; // 120 } factorialize(5);

Sans commentaire:

function factorialize(num) { var result = num; if (num === 0 || num === 1) return 1; while (num > 1) { num--; result *= num; } return result; } factorialize(5);

3. Factorialiser un nombre avec une boucle FOR

function factorialize(num) { // If num = 0 OR num = 1, the factorial will return 1 if (num === 0 || num === 1) return 1; // We start the FOR loop with i = 4 // We decrement i after each iteration for (var i = num - 1; i >= 1; i--) { // We store the value of num at each iteration num = num * i; // or num *= i; /* num var i = num - 1 num *= i i-- i >= 1? 1st iteration: 5 4 = 5 - 1 20 = 5 * 4 3 yes 2nd iteration: 20 3 = 4 - 1 60 = 20 * 3 2 yes 3rd iteration: 60 2 = 3 - 1 120 = 60 * 2 1 yes 4th iteration: 120 1 = 2 - 1 120 = 120 * 1 0 no 5th iteration: 120 0 120 End of the FOR loop */ } return num; //120 } factorialize(5);

Sans commentaire:

function factorialize(num) { if (num === 0 || num === 1) return 1; for (var i = num - 1; i >= 1; i--) { num *= i; } return num; } factorialize(5);

J'espère que vous avez trouvé cela utile. Cela fait partie de ma série d'articles «Comment résoudre les algorithmes FCC» sur les défis de l'algorithme Free Code Camp, où je propose plusieurs solutions et explique étape par étape ce qui se passe sous le capot.

Trois façons de répéter une chaîne en JavaScript

Dans cet article, je vais vous expliquer comment résoudre le défi «Répéter une chaîne répéter une chaîne» de freeCodeCamp. Cela implique…

Deux façons de confirmer la fin d'une chaîne en JavaScript

Dans cet article, je vais vous expliquer comment résoudre le défi «Confirmer la fin» de freeCodeCamp.

Trois façons d'inverser une chaîne en JavaScript

Cet article est basé sur le script d'algorithme de base de Free Code Camp "Inverser une chaîne"

Deux façons de vérifier les palindromes en JavaScript

Cet article est basé sur le scripting d'algorithme de base de Free Code Camp «Check for Palindromes».

Three Ways to Find the Longest Word in a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Three Ways to Title Case a Sentence in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.

Three ways you can find the largest number in an array using JavaScript

In this article, I’m going to explain how to solve Free Code Camp’s “Return Largest Numbers in Arrays” challenge. This…

If you have your own solution or any suggestions, share them below in the comments.

Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)

‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ & ‪#‎MakeItHappen‬!