Tri načina za faktorizaciju broja u JavaScript-u

Ovaj se članak temelji na skripti za osnovni algoritam Free Code Camp “Faktorizacija broja”

U matematici faktorijel negativnog cijelog broja n može biti lukav algoritam. U ovom ću članku objasniti tri pristupa, prvi s rekurzivnom funkcijom, drugi pomoću while petlje i treći pomoću for petlje.

Već smo vidjeli rekurzije pristup na uzici u prethodnom članku, Kako Reverse niz u JavaScriptu na 3 različita načina? Ovaj ćemo put primijeniti isti koncept na broj.

Izazov algoritma

Vrati faktorijel navedenog cijelog broja.

Ako je cijeli broj predstavljen slovom n, faktorijel je umnožak svih pozitivnih cijelih brojeva manjih ili jednakih n.

Faktorijela često su zastupljeni s kraticom n!

Na primjer: 5! = 1 * 2 * 3 * 4 * 5 = 120

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

Dati test slučajevi

  • factorialize (0) treba vratiti 1
  • factorialize (5) treba vratiti 120
  • factorialize (10) trebao bi vratiti 3628800
  • factorialize (20) trebao bi vratiti 2432902008176640000

Što je zapravo faktoriziranje broja?

Kada faktorizirate broj, taj broj množite sa svakim uzastopnim brojem minus.

Ako je vaš broj 5, imali biste:

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

Uzorak bi bio:

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

1. Faktorizirajte broj s rekurzijom

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

Bez komentara:

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

2. Faktorizirajte broj pomoću WHILE petlje

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

Bez komentara:

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

3. Faktorizirajte broj pomoću petlje 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);

Bez komentara:

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

Nadam se da vam je ovo pomoglo. Ovo je dio moje serije članaka "Kako riješiti FCC algoritme" o izazovima Algoritma slobodnog koda, gdje predlažem nekoliko rješenja i korak po korak objašnjavam što se događa ispod haube.

Tri načina za ponavljanje niza u JavaScript-u

U ovom ću članku objasniti kako riješiti izazov FreeCodeCampa "Ponovi niz ponavljaj niz". To uključuje ...

Dva načina za potvrđivanje završetka niza u JavaScript-u

U ovom ću članku objasniti kako riješiti izazov "Potvrdi završetak" freeCodeCampa.

Tri načina za preokret niza u JavaScript-u

Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Obrni niz"

Dva načina za provjeru palindroma u JavaScript-u

Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Provjeri palindrome".

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‬!