Kolm viisi, kuidas arv JavaScript JavaScriptis kindlaks teha

See artikkel põhineb Free Code Campi algoritmide skriptimisel “Arvu faktoreerimine”

Matemaatikas võib mittenegatiivse täisarvu n faktorial olla keeruline algoritm. Selles artiklis selgitan kolme lähenemisviisi, esiteks rekursiivse funktsiooniga, teiseks kasutades silmust while ja kolmandat for loopi.

Oleme juba näinud stringi rekursioonilähenemist eelmises artiklis „ Kuidas stringis Java-koodi muuta kolmel erineval viisil? Seekord rakendame sama kontseptsiooni arvul.

Algoritmi väljakutse

Tagastab esitatud täisarvu faktori.

Kui täisarv on tähega n tähistatud, on faktoriaal kõigi positiivsete täisarvude korrutis, mis on väiksem või võrdne n-ga.

Faktoorid on sageli tähistatud lühikese tähisega n!

Näiteks: 5! = 1 * 2 * 3 * 4 * 5 = 120

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

Pakutakse testjuhtumeid

  • faktoriaal (0) peaks tagastama 1
  • faktoriaal (5) peaks tagastama 120
  • faktoriaalsus (10) peaks tagastama 3628800
  • factorialize (20) peaks tagastama 2432902008176640000

Mis on numbri faktoorimine?

Numbri arvutamisel korrutate selle numbri iga järjestikuse arvuga miinus üks.

Kui teie number on 5, oleks teil:

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

Muster oleks:

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

1. Faktoorige arv rekursiooniga

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

Kommentaarideta:

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

2. Faktoorige arv silmusega 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);

Kommentaarideta:

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

3. Faktoorige arv silmusega 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);

Kommentaarideta:

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

Loodetavasti leidsite sellest abi. See on osa minu artiklist "Kuidas lahendada FCC algoritme" Free Code Camp Algorithm Challenges, kus pakun välja mitu lahendust ja selgitan samm-sammult, mis kapoti all toimub.

Kolm viisi stringi kordamiseks JavaScriptis

Selles artiklis selgitan, kuidas lahendada freeCodeCampi väljakutse "Korda stringi kordus string". See hõlmab…

Kaks võimalust Stringi lõppu kinnitada JavaScriptis

Selles artiklis selgitan, kuidas lahendada freeCodeCampi väljakutse “Kinnita lõppu”.

Kolm viisi stringide ümberpööramiseks JavaScriptis

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Stringi ümberpööramine”

Kaks viisi palindroomide kontrollimiseks JavaScripti abil

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Kontrolli palindroome”.

Kolm viisi, kuidas leida JavaScripti stringi kõige pikem sõna

See artikkel põhineb Free Code Campi algoritmide skriptimisel „Leidke stringi pikim sõna”.

Kolm viisi, kuidas JavaScripti laused pealkirjastada

See artikkel põhineb Free Code Campi algoritmide skriptimisel "Pealkirja juhtum lause".

Kolmel viisil leiate massiivi suurima arvu JavaScripti abil

Selles artiklis selgitan, kuidas lahendada Free Code Campi väljakutse “Massiivide suurimate arvude tagastamine”. See ...

Kui teil on oma lahendus või ettepanekuid, jagage neid allpool kommentaarides.

Või saate jälgida mind Medium , Twitter, Github ja LinkedIn , kohe pärast klõpsate roheline süda allpool ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!