Tre måder at faktorisere et nummer i JavaScript

Denne artikel er baseret på Free Code Camp Basic Algorithm Scripting “Faktoriser et tal”

I matematik kan faktoren for et ikke-negativt heltal n være en vanskelig algoritme. I denne artikel skal jeg forklare tre tilgange, først med den rekursive funktion, anden ved hjælp af en while-loop og tredje ved hjælp af en for-loop.

Vi har allerede set en rekursionsmetode på en streng i den foregående artikel, Sådan vendes en streng i JavaScript på 3 forskellige måder? Denne gang anvender vi det samme koncept på et nummer.

Algoritmeudfordring

Returner faktoren for det angivne heltal.

Hvis heltal er repræsenteret med bogstavet n, er en faktor et produkt af alle positive heltal mindre end eller lig med n.

Fakta er ofte repræsenteret med stenografi notationen n!

For eksempel: 5! = 1 * 2 * 3 * 4 * 5 = 120

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

Medfølgende testtilfælde

  • factorialize (0) skal returnere 1
  • factorialize (5) skal returnere 120
  • factorialize (10) skal returnere 3628800
  • factorialize (20) skal returnere 2432902008176640000

Hvad handler det om at faktorisere et nummer?

Når du faktoriserer et tal, multiplicerer du dette tal med hvert på hinanden følgende tal minus et.

Hvis dit nummer er 5, ville du have:

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

Mønsteret ville være:

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

1. Faktoriser et tal med rekursion

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

Uden kommentarer:

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

2. Faktoriser et tal med en WHILE-løkke

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

Uden kommentarer:

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

3. Faktoriser et tal med en FOR-loop

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

Uden kommentarer:

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

Jeg håber, du fandt dette nyttigt. Dette er en del af min "How to Solve FCC Algorithms" -serie om artikler om Free Code Camp Algorithm Challenges, hvor jeg foreslår flere løsninger og forklarer trin for trin, hvad der sker under emhætten.

Tre måder at gentage en streng i JavaScript

I denne artikel vil jeg forklare, hvordan man løser freeCodeCamp's "Gentag en streng gentag en streng" -udfordring. Dette involverer ...

To måder at bekræfte afslutningen på en streng i JavaScript

I denne artikel forklarer jeg, hvordan man løser freeCodeCamp's "Confirm the Ending" -udfordring.

Tre måder at vende en streng i JavaScript

Denne artikel er baseret på Free Code Camp Basic Algorithm Scripting “Vend en streng”

To måder at kontrollere palindromer i JavaScript

Denne artikel er baseret på Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Tre måder at finde det længste ord i en streng i JavaScript

Denne artikel er baseret på Free Code Camp Basic Algorithm Scripting "Find det længste ord i en streng".

Tre måder at betegne sag på en sætning i JavaScript

Denne artikel er baseret på Free Code Camp Basic Algorithm Scripting "Titel sag en sætning".

På tre måder kan du finde det største tal i en matrix ved hjælp af JavaScript

I denne artikel vil jeg forklare, hvordan man løser Free Code Camps "Returner største numre i arrays" -udfordring. Dette…

Hvis du har din egen løsning eller forslag, så del dem nedenfor i kommentarerne.

Eller du kan følge mig på Medium , Twitter, Github og LinkedIn lige efter at du har klikket på det grønne hjerte nedenfor ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!