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

ลำดับฟีโบนัชชีใน Java: Iterative และ Recursive

ลำดับฟีโบนัชชี (Fibonacci Sequence) ตัวถัดไป = ผลรวม 2 ตัวก่อนหน้า เริ่มจาก 0, 1 → 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55...

วิธีที่ 1: Iterative (วนลูป)

public class FibonacciSequence {
    public static void main(String[] args) {
        int number = 5, firstTerm = 0, secondTerm = 1;
        
        for (int i = 0; i < number; ++i) {
            System.out.println(firstTerm);
            int nextNumber = firstTerm + secondTerm;
            firstTerm = secondTerm;
            secondTerm = nextNumber;
        }
    }
}

ผลลัพธ์: 0 1 1 2 3

หลักการ

  1. พิมพ์ firstTerm
  2. คำนวณ nextNumber = firstTerm + secondTerm
  3. เลื่อนค่า: firstTerm = secondTerm, secondTerm = nextNumber
  4. วนซ้ำตามจำนวนที่ต้องการ

วิธีที่ 2: Recursive (ฟังก์ชันเรียกตัวเอง)

class FibonacciSequence {
    static void getNextValue(int number, int firstTerm, int secondTerm) {
        if (number > 0) {
            System.out.println(firstTerm);
            int nextNumber = firstTerm + secondTerm;
            firstTerm = secondTerm;
            secondTerm = nextNumber;
            getNextValue(number - 1, firstTerm, secondTerm); // เรียกตัวเอง
        }
    }
    
    public static void main(String args[]) {
        int number = 5, firstTerm = 0, secondTerm = 1;
        getNextValue(number, firstTerm, secondTerm);
    }
}

ผลลัพธ์: 0 1 1 2 3

หลักการ Recursive

  • ฟังก์ชัน getNextValue เรียกตัวเองพร้อมลด number ลง 1
  • Base case: number > 0 หยุดเมื่อ number = 0
  • แต่ละรอบคำนวณค่าถัดไปและส่งค่าใหม่ไปรอบถัดไป

เปรียบเทียบ

วิธีข้อดีข้อเสีย
Iterativeเข้าใจง่าย ประสิทธิภาพดี ไม่กิน Stackโค้ดยาวกว่า
Recursiveโค้ดสั้น สวย สมเหตุสมผลทางคณิตศาสตร์กิน Stack memory อาจ StackOverflow ถ้าน่ำนาน

สรุป

ฟีโบนัชชีเขียนได้ทั้ง Iterative และ Recursive ใน Java เลือกตามความเหมาะสม Iterative เร็วกว่า Recursive เข้าใจง่ายกว่า