Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เปรียบเทียบประสิทธิภาพฟังก์แฟกทอเรียลแบบ Recursive และ Loop ใน JavaScript

เราจะเขียนฟังก์ชัน JavaScript สองฟังก์ชันที่ทำหน้าที่คำนวณแฟกทอเรียล (Factorial) ของตัวเลขที่รับเข้ามา:

  • ฟังก์ชันแรก: ใช้ for loop หรือ while loop ในการคำนวณ
  • ฟังก์ชันที่สอง: ใช้วิธีการ Recursive (การเรียกซ้ำ)

จากนั้นเราจะเปรียบเทียบเวลาที่ใช้ในการทำงานของทั้งสองวิธีผ่านการวนซ้ำจำนวนมาก

ตัวอย่างโค้ด

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

ผลลัพธ์ตัวอย่าง

Looping Approach: 886.720ms
Recursive Approach: 6526.203ms

ข้อสังเกต

  • เวลาที่แท้จริงจะแตกต่างกันไปตามเครื่อง แต่ อัตราส่วนจะคงที่ โดย Loop เร็วกว่า Recursive หลายเท่า
  • Recursive ใช้หน่วยความจำมากกว่า (Call Stack) และมี Overhead จากการเรียกฟังก์ชันซ้ำ
  • Loop เหมาะสำหรับการคำนวณซ้ำๆ จำนวนมาก
  • Recursive เข้าใจง่ายและสะดวกสำหรับปัญหาที่มีโครงสร้างแบบแบ่งย่อย (Divide & Conquer)