ลำดับฟีโบนัชชี (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
หลักการ
- พิมพ์ firstTerm
- คำนวณ nextNumber = firstTerm + secondTerm
- เลื่อนค่า: firstTerm = secondTerm, secondTerm = nextNumber
- วนซ้ำตามจำนวนที่ต้องการ
วิธีที่ 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 เข้าใจง่ายกว่า