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

หาค่าน้อยที่สุดในอาร์เรย์ด้วย Recursion ใน JavaScript

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