Ez a cikk a Free Code Camp algoritmus-szkriptjein alapszik: „Számok ténylegesítése”
A matematikában egy nem negatív n egész szám faktoriális algoritmus lehet. Ebben a cikkben három megközelítést fogok elmagyarázni, először a rekurzív függvénnyel, másodszor a while ciklus, a harmadik pedig a for ciklus használatával.
A String rekurziós megközelítését már láthattuk az előző cikkben: Hogyan lehet egy karakterláncot megfordítani JavaScript-ben 3 különböző módon? Ezúttal ugyanazt a koncepciót alkalmazzuk egy számra.
Algoritmus kihívás
Adja vissza a megadott egész szám faktoriálját.Ha az egész számot n betűvel ábrázoljuk, akkor a faktoriális tényező az összes n kisebb vagy egyenlő pozitív egész szám szorzata.
A tényezőket gyakran rövidített n jelöléssel ábrázolják !
Például: 5! = 1 * 2 * 3 * 4 * 5 = 120
function factorialize(num) { return num; } factorialize(5);
Biztosított tesztesetek
- a factorialize (0) értéke 1 legyen
- a ténylegesítés (5) értéke 120
- a factorialize (10) 3628800 értéket ad vissza
- a factorialize (20) értéknek vissza kell adnia a 2432902008176640000 értéket
Miről szól egy szám ténylegesítése?
Amikor egy számot ténylegesít, akkor ezt a számot megszorozza az egyes egymást követő számokkal mínusz egyvel.
Ha a számod 5, akkor:
5! = 5 * 4 * 3 * 2 * 1
A minta a következő lenne:
0! = 1 1! = 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1
1. Faktorizáljon egy számot rekurzióval
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);
Hozzászólások nélkül:
function factorialize(num) { if (num < 0) return -1; else if (num == 0) return 1; else { return (num * factorialize(num - 1)); } } factorialize(5);
2. Faktorizáljon egy számot WHILE hurokkal
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);
Hozzászólások nélkül:
function factorialize(num) { var result = num; if (num === 0 || num === 1) return 1; while (num > 1) { num--; result *= num; } return result; } factorialize(5);
3. Faktorizáljon egy számot egy FOR hurokkal
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);
Hozzászólások nélkül:
function factorialize(num) { if (num === 0 || num === 1) return 1; for (var i = num - 1; i >= 1; i--) { num *= i; } return num; } factorialize(5);
Remélem, hasznosnak találta ezt. Ez része a Free Code Camp Algorithm Challenges című „Hogyan lehet megoldani az FCC algoritmusokat” című cikksorozatomnak, ahol számos megoldást javaslok, és lépésről lépésre elmagyarázom, mi történik a motorháztető alatt.
Három módon ismételhetünk egy karakterláncot a JavaScript-ben
Ebben a cikkben elmagyarázom, hogyan lehet megoldani a freeCodeCamp „Karakterlánc megismétlése sztring megismétlése” kihívását. Ez magában foglalja…
Kétféle módon erősítheti meg a String végét a JavaScript-ben
Ebben a cikkben elmagyarázom, hogyan lehet megoldani a freeCodeCamp „Vége megerősítése” kihívását.
Három módszer a karakterlánc megfordítására a JavaScript-ben
Ez a cikk a Free Code Camp algoritmus-szkriptjein alapul, „Fordítsa meg a karakterláncot”
Kétféle módja annak, hogy ellenőrizze a palindromokat a JavaScript-ben
Ez a cikk a Free Code Camp Basic Algorithm Scripting „Palindromes ellenőrzése” alapján készült.
Három módszer a leghosszabb szó megkeresésére egy stringben a JavaScript-ben
Ez a cikk a Free Code Camp algoritmus-szkriptjein alapul: „Keresse meg a leghosszabb szót egy karakterláncban”.
Három módszer a mondat elnevezésére a JavaScript-ben
Ez a cikk a „Free Code Camp Basic Algorithm Scripting“ Title Case a Sentence ”címen alapul.
Három módon találhatja meg a tömb legnagyobb számát a JavaScript használatával
Ebben a cikkben elmagyarázom, hogyan lehet megoldani a Free Code Camp „A legnagyobb számok visszaküldése tömbökben” kihívását. Ez…
Ha van saját megoldása vagy javaslata, ossza meg őket alább a megjegyzésekben.
Vagy akkor utánam a Medium , Twitter, GitHub és LinkedIn , jobb kattintás után a zöld szívében alábbi ;-)
# StayCurious, # KeepOnHacking és # MakeItHappen!