Chúng tôi sẽ viết hai hàm JavaScript, công việc của cả hai hàm sẽ là nhận một số và trả về giai thừa của nó.
Hàm đầu tiên nên sử dụng vòng lặp for hoặc vòng lặp while để tính giai thừa. Trong khi đó, hàm thứ hai sẽ tính giai thừa bằng cách sử dụng phương pháp đệ quy.
Cuối cùng, chúng ta nên so sánh thời gian được thực hiện bởi các hàm này qua một số lượng lớn các lần lặp.
Ví dụ
Sau đây là mã -
const factorial = (num = 1) => { let result = 1; for (let i = 2; i <= num; i += 1) { result *= i; } return result; } const factorialRecursive = (num = 1) => { if(num > 1){ return num * factorialRecursive(num - 1); }else{ return 1; } }; const ITERATIONS = 100000000; const num = 12; console.time('Looping Approach'); for(let i = 0; i < ITERATIONS; i++){ factorial(num); }; console.timeEnd('Looping Approach'); console.time('Recursive Approach'); for(let j = 0; j < ITERATIONS; j++){ factorialRecursive(num); }; console.timeEnd('Recursive Approach');
Đầu ra
Sau đây là kết quả trên bảng điều khiển -
Looping Approach: 886.720ms Recursive Approach: 6526.203ms
Thời gian thực hiện này sẽ khác nhau giữa các máy với tỷ lệ nhất định phải giữ nguyên hoặc ít hơn.