Ba cách để thừa số hóa một số trong JavaScript


Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Trong toán họcgiai thừa của một số nguyên không âm N có thể là một thuật toán phức tạp. Trong bài viết này, tôi sẽ giải thích ba cách tiếp cận, thứ nhất với hàm đệ quy, thứ hai sử dụng vòng lặp while và thứ ba sử dụng vòng lặp for.

Chúng ta đã thấy cách tiếp cận đệ quy trên Chuỗi trong bài viết trước, Làm cách nào để đảo ngược một chuỗi trong JavaScript theo 3 cách khác nhau? Lần này chúng ta sẽ áp dụng khái niệm tương tự trên một số.

Thử thách thuật toán

Trả về giai thừa của số nguyên được cung cấp.

Nếu số nguyên được biểu diễn bằng chữ cái n, giai thừa là tích của tất cả các số nguyên dương nhỏ hơn hoặc bằng n.

Giai thừa thường được biểu diễn bằng ký hiệu tốc ký N!

Ví dụ: 5! = 1 * 2 * 3 * 4 * 5 = 120


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

Các trường hợp thử nghiệm được cung cấp

  • giai thừa hóa (0) nên trả lại 1
  • giai thừa hóa (5) nên trả lại 120
  • giai thừa hóa(10) nên trả lại 3628800
  • giai thừa hóa(20) nên trả về 2432902008176640000

Giai thừa hóa một số là gì?

Khi bạn giai thừa một số, bạn đang nhân số đó với mỗi số liên tiếp trừ đi một.

Nếu số của bạn là 5, bạn sẽ có:

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

Mô hình sẽ là:

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

1. Thừa số của một số với đệ quy

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. Tính thừa số với vòng lặp 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. Thừa số một số với vòng lặp 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);

Tôi hy vọng bạn tìm thấy điều này hữu ích. Đây là một phần trong loạt bài viết “Cách giải quyết các thuật toán FCC” của tôi về Các thách thức về thuật toán của Free Code Camp, trong đó tôi đề xuất một số giải pháp và giải thích từng bước những gì xảy ra bên trong.

Đọc thêm  Bong bóng sự kiện trong JavaScript – Cách lan truyền sự kiện hoạt động với các ví dụ

Ba cách để lặp lại một chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Lặp lại một chuỗi lặp lại một chuỗi” của freeCodeCamp. Điều này liên quan đến…

Hai cách để xác nhận kết thúc của Chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Xác nhận Kết thúc” của freeCodeCamp.

Ba cách để đảo ngược một chuỗi trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Reverse a String”

Hai cách để kiểm tra Palindromes trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Ba cách để tìm từ dài nhất trong chuỗi trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tìm từ dài nhất trong một chuỗi”.

Ba cách đặt tiêu đề cho một câu trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tiêu đề trường hợp một câu”.

Ba cách bạn có thể tìm thấy số lớn nhất trong một mảng bằng JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Trả về số lớn nhất trong mảng” của Free Code Camp. Cái này…

Nếu bạn có giải pháp của riêng mình hoặc bất kỳ đề xuất nào, hãy chia sẻ chúng bên dưới phần bình luận.

Hoặc bạn có thể theo dõi tôi trên Trung bình, TwitterGithubLinkedInngay sau khi bạn nhấp vào trái tim màu xanh bên dưới 😉

Đọc thêm  Cómo crear el juego de la serpiente en JavaScript

#‎StayCurious, #‎KeepOnHacking & #‎MakeItHappen!





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status