หอคอยฮานอย
ในแบบฝึกหัดนี้ คุณจะได้นำปริศนาหอคอยฮานอย (Towers of Hanoi)มาใช้งานด้วยอัลกอริทึมแบบ recursive เป้าหมายของเกมนี้คือการย้ายดิสก์ทั้งหมดจากแท่งหนึ่งไปยังอีกแท่งหนึ่ง โดยปฏิบัติตามกฎเหล่านี้:
- ย้ายดิสก์ได้ครั้งละหนึ่งแผ่นเท่านั้น
- หยิบได้เฉพาะดิสก์บนสุดของกองแล้วนำไปวางบนกองอื่นเท่านั้น
- ห้ามวางดิสก์ขนาดใหญ่กว่าทับบนดิสก์ขนาดเล็กกว่า

อัลกอริทึมที่แสดงไว้เป็นการใช้งานเกมนี้ด้วยดิสก์สี่แผ่นและแท่งสามแท่ง ได้แก่ 'A', 'B' และ 'C' โค้ดมีข้อผิดพลาดสองจุด หากรันโค้ดนี้จะทำให้คอนโซลหยุดทำงาน เพราะมีการเรียก recursive เกินความลึกสูงสุดที่รองรับได้ ลองหาบั๊กและแก้ไขให้ถูกต้องดูสิ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
โครงสร้างข้อมูลและอัลกอริทึมใน Python
คำแนะนำการฝึกหัด
- แก้ไข base case ให้ถูกต้อง
- แก้ไขการเรียกฟังก์ชัน
hanoi()ให้ถูกต้อง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def hanoi(num_disks, from_rod, to_rod, aux_rod):
# Correct the base case
if num_disks >= 0:
# Correct the calls to the hanoi function
hanoi(num_disks, from_rod, aux_rod, to_rod)
print("Moving disk", num_disks, "from rod", from_rod,"to rod",to_rod)
hanoi(num_disks, aux_rod, to_rod, from_rod)
num_disks = 4
source_rod = 'A'
auxiliar_rod = 'B'
target_rod = 'C'
hanoi(num_disks, source_rod, target_rod, auxiliar_rod)