เรียนรู้การเขียนโปรแกรมแบบแยกส่วน แก้ไขง่าย ใช้งานซ้ำได้
พร้อมเจาะลึกฟังก์ชันเรียกตัวเอง (Recursion) แบบเห็นภาพจริง
การเขียนทุกอย่างในก้อนเดียว = หายนะ (Debug ยากมาก)
เขียน Code ยาวเหยียด ซ้ำซ้อน แก้ไขจุดหนึ่งกระทบไปหมด เหมือนสายไฟที่พันกันยุ่งเหยิง
แบ่งงานใหญ่เป็นงานย่อย (Sub-problems) เรียกใช้งานซ้ำได้ (Reusability) แก้ไขง่าย (Maintainability)
ฟังก์ชันเหมือนเครื่องจักร รับวัตถุดิบ -> ประมวลผล -> ส่งคืนผลลัพธ์
เริ่มด้วย def ตามด้วยชื่อฟังก์ชัน และ Parameters (ตัวแปรรับค่า) ในวงเล็บ อย่าลืมเครื่องหมาย :
ส่วนของการคำนวณหรือตรรกะ ต้องมีการ Indentation (ย่อหน้า) เข้าไปเสมอ
สำคัญ! ใช้ return เพื่อส่งผลลัพธ์กลับไปให้ผู้เรียก
* ห้ามใช้ print ภายในฟังก์ชันคำนวณ (ยกเว้นโจทย์สั่ง)
ตัวแปรก็มีอายุขัยและพื้นที่ของมัน เข้าใจเรื่องนี้เพื่อหลีกเลี่ยง Bug ยอดฮิต!
ตัวแปรที่ประกาศข้างนอก ทุกคนเห็น ทุกคนใช้ได้ (แต่ระวังพัง!)
ตัวแปรในนี้ เกิดและตายในนี้
โลกภายนอกมองไม่เห็น!
x = 10 (Local)
Global_Var = 99
การตั้งชื่อตัวแปรใน Local ซ้ำกับ Global จะทำให้ Python มองเห็นแต่ตัว Local (บังตัว Global มิดเลย)
พยายามส่งค่าผ่าน Parameter เสมอ หลีกเลี่ยงการใช้ Global variable ถ้าไม่จำเป็น เพื่อลดความสับสน
ลองใช้งานฟังก์ชันจริงจากโจทย์ Level 1-3
สูตร: (C * 9/5) + 32
Recursion คือการแก้ปัญหาใหญ่ด้วยการแบ่งเป็นปัญหาย่อยที่หน้าตาเหมือนเดิม
ต้องประกอบด้วย 2 ส่วนสำคัญ:
เงื่อนไขที่จะทำให้ฟังก์ชันจบการทำงาน ถ้าลืม = Error (Stack Overflow)
การเรียกตัวเองด้วยโจทย์ที่เล็กลงเรื่อยๆ จนกว่าจะถึง Base Case
def factorial(n):
if n == 0: return 1 // Base Case
else: return n * factorial(n-1) // Recursive
เกมคลาสสิกที่ใช้หลักการ Recursion แก้ปัญหา
กติกา: ย้ายจานทั้งหมดจากเสาซ้ายไปเสาขวา โดยห้ามวางจานใหญ่ทับจานเล็ก
move(n, start, end, temp):
1. ย้าย n-1 ใบ ไปเสา temp
2. ย้ายใบใหญ่สุด ไปเสา end
3. ย้าย n-1 ใบ จาก temp ไป end