Chúng ta sẽ viết hai hàm JavaScript, cả hai đều nhận vào một số và trả về giai thừa của số đó.
Hàm đầu tiên sử dụng vòng lặp for hoặc while để tính giai thừa. Hàm thứ hai sử dụng cách tiếp cận đệ quy.
Cuối cùng, chúng ta so sánh thời gian thực thi của hai hàm này qua một số lượng lớn lần lặp.
Ví dụ
Dưới đây là mã nguồn:
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');Kết quả
Đầu ra trên console:
Looping Approach: 886.720ms Recursive Approach: 6526.203ms
Thời gian thực thi sẽ khác nhau tùy máy, nhưng tỷ lệ giữa hai cách tiếp cận sẽ giữ nguyên.