Trys būdai, kaip apskaičiuoti skaičių „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Skaičiaus nustatymas“

Matematikoje negatyvaus sveikojo skaičiaus n faktorialas gali būti keblus algoritmas. Šiame straipsnyje aš paaiškinsiu tris metodus, pirmiausia naudodamasis rekursine funkcija, antra, naudodamas „while loop“, trečias - „for loop“.

Mes jau matėme ankstesnio straipsnio „String“ rekursinį požiūrį ankstesniame straipsnyje „ Kaip pakeisti eilutę„ JavaScript “3 skirtingais būdais? Šį kartą ta pati koncepcija bus taikoma skaičiui.

Algoritmo iššūkis

Grąžinkite pateikto sveiko skaičiaus faktorialą.

Jei sveikasis skaičius žymimas raide n, faktorius yra visų teigiamų sveikųjų skaičių, mažesnių arba lygių n, sandauga.

Faktorai dažnai vaizduojami trumpiniu užrašu n!

Pavyzdžiui: 5! = 1 * 2 * 3 * 4 * 5 = 120

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

Pateikti bandymo atvejai

  • faktorializuoti (0) turėtų grąžinti 1
  • faktorializavimas (5) turėtų grąžinti 120
  • faktorius (10) turėtų grąžinti 3628800
  • faktorius (20) turėtų grąžinti 2432902008176640000

Kas yra skaičiaus faktorizavimas?

Kai suskaičiuojate skaičių, jūs dauginate tą skaičių iš kiekvieno iš eilės skaičiaus atėmus vieną.

Jei jūsų numeris yra 5, turėtumėte:

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

Modelis būtų:

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

1. Suskaičiuokite rekursijos skaičių

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

Be komentarų:

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

2. Suskaičiuokite skaičių su WHILE kilpa

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

Be komentarų:

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

3. Suskaičiuokite skaičių su FOR kilpa

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

Be komentarų:

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

Tikiuosi, kad jums tai buvo naudinga. Tai yra mano straipsnių apie „Kaip išspręsti FCC algoritmus“ tema „Laisvojo kodo stovyklos algoritmo iššūkiai“ dalis, kur aš siūlau keletą sprendimų ir žingsnis po žingsnio paaiškinu, kas vyksta po gaubtu.

Trys būdai, kaip pakartoti eilutę „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Pakartokite eilutę pakartokite eilutę“. Tai apima…

Du būdai patvirtinti eilutės pabaigą „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Patvirtinti pabaigą“.

Trys būdai, kaip pakeisti eilutę „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Stygos pakeitimas“

Du būdai patikrinti, ar „JavaScript“ nėra palindromų

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinių algoritmų scenarijų „Palindromų tikrinimas“.

Trys būdai, kaip rasti ilgiausią „JavaScript“ eilutės žodį

Šis straipsnis yra paremtas „Free Code Camp“ pagrindinių algoritmų scenarijais „Raskite ilgiausią eilutės žodį“.

Trys būdai, kaip įvesti sakinį „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Pavadinimo atvejis sakiniu“.

Trimis būdais galite rasti didžiausią masyvo skaičių naudodami „JavaScript“

Šiame straipsnyje aš paaiškinsiu, kaip išspręsti „Free Code Camp“ iššūkį „Grąžinti didžiausią skaičių masyvuose“. Tai ...

Jei turite savo sprendimą ar kokių nors pasiūlymų, pasidalykite jais toliau komentaruose.

Arba galite sekti mane „ Medium“ , „Twitter“, „Github“ ir „ LinkedIn“ , iškart po to, kai spustelėsite žalią širdį žemiau ;-)

# StayCurious, # KeepOnHacking ir # MakeItHappen!