ลำดับฟีโบนัชชี (Fibonacci Sequence) เป็นหนึ่งในลำดับที่มีชื่อเสียงที่สุดในคณิตศาสตร์ มันคำนวณได้ง่ายมาก: ตัวเลขแต่ละตัวในลำดับคือผลรวมของสองตัวเลขก่อนหน้า
ลำดับนี้ได้เข้าสู่โลกการเขียนโปรแกรม บ่อยครั้งที่ใช้เพื่อฝึกนักพัฒนาด้านอัลกอริทึมและลูป (loops)
ในคู่มือนี้ เราจะพูดถึงวิธีเขียนลำดับฟีโบนัชชีใน Python เราจะ看方法สองวิธีที่คุณสามารถใช้เพื่อนำลำดับฟีโบนัชชีไปใช้: แบบวนซ้ำ (iterative) และแบบเรียกซ้ำ (recursive)
ลำดับฟีโบนัชชีคืออะไร?
ลำดับฟีโบนัชชีเป็นชุดของตัวเลข ตัวเลขแต่ละตัวคือผลคูณของสองตัวเลขก่อนหน้าในลำดับ ลำดับเริ่มต้นดังนี้:
0, 1, 1, 2, 3, 4, 8, 13, 21, 34
มันทำงานต่อไปเรื่อยๆ จนกว่าคุณจะหยุดคำนวณตัวเลขใหม่ กฎสำหรับคำนวณตัวเลขถัดไปในลำดับคือ:
x(n) = x(n-1) + x(n-2)
x(n) คือตัวเลขถัดไปในลำดับ x(n-1) คือพจน์ก่อนหน้า x(n-2) คือพจน์ก่อนพจน์สุดท้าย
ลำดับฟีโบนัชชี Python: วิธีแบบวนซ้ำ (Iterative Approach)
มาเริ่มด้วยการพูดถึงวิธีแบบวนซ้ำในการนำลำดับฟีโบนัชชีไปใช้
วิธีนี้ใช้ลูป "while" ซึ่งคำนวณตัวเลขถัดไปในรายการจนกว่าเงื่อนไขเฉพาะจะถูกตอบสนอง ทุกครั้งที่ลูป while รัน โค้ดของเราจะวนซ้ำ นี่คือเหตุผลที่เรียกวิธีนี้ว่า iterative
มาเริ่มต้นด้วยการตั้งค่าเริ่มต้นบางค่า:
terms_to_calculate = 9 n1, n2 = 0, 1 counted = 0
เราประกาศตัวแปรสี่ตัว
ตัวแปรแรกติดตามว่าต้องการคำนวณกี่ค่า ตัวแปรถัดไปสองตัว n1 และ n2 เป็นสองรายการแรกในรายการ เราต้องระบุค่าเหล่านี้ มิฉะนั้นโปรแกรมของเราจะไม่รู้ว่าจะเริ่มที่ไหน ค่าเหล่านี้จะเปลี่ยนเมื่อเราเริ่มคำนวณตัวเลขใหม่
ตัวแปรสุดท้ายติดตามจำนวนพจน์ที่เราคำนวณในโปรแกรม Python ของเรา
มาเขียนลูปที่คำนวณตัวเลขฟีโบนัชชี:
while counted < terms_to_calculate: print(n1) new_number = n1 + n2 n1 = n2 n2 = new_number counted += 1
ลูป while นี้รันจนกว่าจำนวนค่าที่เราคำนวณจะเท่ากับจำนวนตัวเลขทั้งหมดที่เราต้องการคำนวณ ลูปพิมพ์ค่าของ n1 ออกไปที่ shell มันคำนวณตัวเลขถัดไปโดยการบวกตัวเลขก่อนหน้าในลำดับกับตัวเลขก่อนหน้านั้น
เราสลับค่าของ n1 ให้เท่ากับ n2 ทำให้ n1 เป็นตัวเลขแรกหลังตัวเลขใหม่ เราตั้งค่า n2 ให้เท่ากับตัวเลขใหม่ ต่อไป เราใช้ตัวดำเนินการ += เพื่อเพิ่ม 1 ให้กับตัวแปร counted ของเรา
โค้ดของเราคืนค่า:
1
1
2
3
5
8
13
21
โปรแกรมของเราคำนวณค่าแรกเก้าของลำดับฟีโบนัชชีสำเร็จแล้ว!
ลำดับฟีโบนัชชี Python: วิธีแบบเรียกซ้ำ (Recursive Approach)
การคำนวณลำดับฟีโบนัชชีเป็นกรณีการใช้งานที่สมบูรณ์แบบสำหรับการเรียกซ้ำ (recursion) ฟังก์ชันเรียกซ้ำคือฟังก์ชันที่พึ่งพาตัวเองในการแก้ปัญหา
ฟังก์ชันเรียกซ้ำแยกปัญหาออกเป็นปัญหาย่อยและใช้ตัวเองแก้ไข มาเริ่มต้นด้วยการกำหนดตัวแปรที่ติดตามจำนวนตัวเลขที่เราต้องการคำนวณ:
terms_to_calculate = 9
โปรแกรมนี้ต้องการกำหนดตัวแปรเพียงตัวเดียว ต่อไป เราสามารถสร้างฟังก์ชันที่คำนวณตัวเลขถัดไปในลำดับ:
def calculate_number(number): if number <= 1: return number else: return(calculate_number(number-1) + calculate_number(number-2))
ฟังก์ชันนี้ตรวจสอบว่าตัวเลขที่ส่งเข้ามาเท่ากับหรือน้อยกว่า 1 หากใช่ ตัวเลขนั้นจะถูกคืนค่าโดยไม่มีการคำนวณ มิฉะนั้น เราเรียกฟังก์ชัน calculate_number() สองครั้งเพื่อคำนวณผลรวมของสองรายการก่อนหน้าในรายการ
สุดท้าย เราต้องเขียนโปรแกรมหลักที่ execute ฟังก์ชันของเรา:
for number in range(terms_to_calculate): print(calculate_number(number))
ลูปนี้จะ execute จำนวนครั้งเท่ากับค่าของ terms_to_calculate กล่าวอีกนัยหนึ่ง ลูปของเราจะ execute 9 ครั้ง ลูปนี้เรียกเมธอด calculate_number() เพื่อคำนวณตัวเลขถัดไปในลำดับ มันพิมพ์ตัวเลขนี้ไปยังคอนโซล
โค้ดของเราคืนค่า:
1
1
2
3
5
8
13
21
เอาต์พุตจากโค้ดนี้เหมือนกับตัวอย่างก่อนหน้าของเรา
ความแตกต่างอยู่ที่วิธีการที่เราใช้ เรากำหนดฟังก์ชันเรียกซ้ำซึ่งเรียกตัวเองเพื่อคำนวณตัวเลขถัดไปในลำดับ วิธีแบบเรียกซ้ำมักถูกเลือกมากกว่าวิธีแบบวนซ้ำเพราะเข้าใจง่ายกว่า
โค้ดนี้ใช้อัตราส่วนบรรทัดน้อยกว่าตัวอย่างแบบวนซ้ำของเรามาก นอกจากนี้ เราต้องกำหนดตัวแปรเพียงตัวเดียวสำหรับโปรแกรมนี้ให้ทำงาน ตัวอย่างแบบวนซ้ำของเราต้องการให้เรากำหนดตัวแปรสี่ตัว
สรุป
ลำดับฟีโบนัชชีสามารถสร้างได้โดยใช้วิธีแบบวนซ้ำหรือแบบเรียกซ้ำ
วิธีแบบวนซ้ำพึ่งพาลูป while เพื่อคำนวณตัวเลขถัดไปในลำดับ วิธีแบบเรียกซ้ำเกี่ยวข้องกับการกำหนดฟังก์ชันที่เรียกตัวเองเพื่อคำนวณตัวเลขถัดไปในลำดับ
ตอนนี้คุณพร้อมที่จะคำนวณลำดับฟีโบนัชชีใน Python อย่างมืออาชีพแล้ว!