Recursive Function หาค่า Minimum ในอาร์เรย์
เปรียบเทียบตัวแรกกับตัวที่สอง นำค่าน้อยกว่าไปเรียกฟังก์ชันซ้ำกับส่วนที่เหลือ
ตัวอย่างโค้ด
function findMinimumElementUsingRecursive(numbers) {
// Base case: เหลือ 1 element
if (numbers.length === 1) {
return numbers[0];
}
// Recursive case: เปรียบเทียบ 2 ตัวแรก
if (numbers[0] > numbers[1]) {
// ตัวแรกมากกว่า -> ตัดตัวแรกทิ้ง เรียกซ้ำกับที่เหลือ
return findMinimumElementUsingRecursive(numbers.slice(1));
} else {
// ตัวแรกน้อยกว่าหรือเท่า -> ตัดตัวที่สองทิ้ง เรียกซ้ำ
return findMinimumElementUsingRecursive([numbers[0]].concat(numbers.slice(2)));
}
}
var numbers = [10, 101, 76, 56, 5, 210, 3, 100];
console.log("The minimum element is = " + findMinimumElementUsingRecursive(numbers)); // 3
วิธีรัน
node fileName.js
ผลลัพธ์
The minimum element is = 3
คำอธิบาย
- Base case: length === 1 คืนค่าตัวเดียว
- Recursive: เปรียบเทียบ index 0 กับ 1 เก็บค่าน้อยกว่า ตัดอีกตัวทิ้ง
- Time: O(n), Space: O(n) เนื่องจาก call stack และ slice() สร้างอาร์เรย์ใหม่
⚠️ ข้อจำกัด
- Stack overflow กับอาร์เรย์ใหญ่ (JavaScript call stack limit ~10,000-15,000)
- slice() สร้างอาร์เรย์ใหม่ทุกครั้ง ใช้ memory มาก
วิธีปฏิบัติจริง: ใช้ Math.min() หรือ reduce()
// ทันสมัย เร็ว และไม่มีปัญหา stack
const min = Math.min(...numbers); // spread operator
// หรือ
const min2 = numbers.reduce((a, b) => Math.min(a, b));