Три начина за факторизиране на число в JavaScript

Тази статия се основава на скриптове за базисен алгоритъм на Free Code Camp „Факторизиране на число“

В математиката факториалът на неотрицателно цяло число n може да бъде сложен алгоритъм. В тази статия ще обясня три подхода, първи с рекурсивна функция, втори, използващ цикъл while и трети, използващ цикъл for.

Вече сме виждали рекурсивен подход за низ в предишната статия, Как да обърнем низ в JavaScript по 3 различни начина? Този път ще приложим същата концепция върху число.

Предизвикателство на алгоритъма

Връща факториала на предоставеното цяло число.

Ако цялото число е представено с буквата n, факториал е произведението на всички положителни цели числа, по-малки или равни на n.

Факторите често се представят със стенографичното означение n!

Например: 5! = 1 * 2 * 3 * 4 * 5 = 120

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

Предоставени тестови случаи

  • factorialize (0) трябва да върне 1
  • factorialize (5) трябва да върне 120
  • факторизиране (10) трябва да върне 3628800
  • factorialize (20) трябва да върне 2432902008176640000

Какво е факторизиране на числото?

Когато разлагате число на факториали, умножавате това число по всяко поредно число минус едно.

Ако вашият номер е 5, ще имате:

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

Моделът ще бъде:

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

1. Факторизирайте число с рекурсия

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

Без коментари:

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

2. Факторизирайте число с цикъл 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);

Без коментари:

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

3. Факторизирайте число с цикъл 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);

Без коментари:

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

Надявам се, че сте намерили това за полезно. Това е част от поредицата ми статии „Как да реша алгоритми на FCC“ за предизвикателствата на алгоритъма на Free Code Camp, където предлагам няколко решения и обяснявам стъпка по стъпка какво се случва под капака.

Три начина за повторение на низ в JavaScript

В тази статия ще ви обясня как да разрешите предизвикателството на freeCodeCamp „Повторете низ, повторете низ“. Това включва ...

Два начина за потвърждаване на края на низ в JavaScript

В тази статия ще ви обясня как да решите предизвикателството „Потвърдете края“ на freeCodeCamp.

Три начина за обръщане на низ в JavaScript

Тази статия се основава на скриптове „Обратен низ“ на алгоритъма „Основен алгоритъм“.

Два начина за проверка за палиндроми в JavaScript

Тази статия се основава на скриптове за базисен алгоритъм на Free Code Camp „Проверка за палиндроми“.

Три начина за намиране на най-дългата дума в низ в JavaScript

Тази статия се основава на скриптове за основен алгоритъм на Free Code Camp „Намерете най-дългата дума в низ“.

Три начина за озаглавяване на изречение в JavaScript

Тази статия се основава на скриптове за основен алгоритъм на Free Code Camp „Case Case a Sentence“.

Три начина да намерите най-голямото число в масив с помощта на JavaScript

В тази статия ще ви обясня как да решите предизвикателството „Върнете най-големите числа в масиви“ на Free Code Camp. Това…

Ако имате собствено решение или някакви предложения, споделете ги по-долу в коментарите.

Или можете да ме следвате в Medium , Twitter, Github и LinkedIn , веднага след като щракнете върху зеленото сърце отдолу ;-)

# Останете любопитни, # KeepOnHacking & # MakeItHappen!