ฟังก์ชันที่เรียกใช้ตัวเอง — ฟังดูงงแต่จริงๆ ง่ายมาก · หน้านี้ทำมาเพื่อคนที่ไม่เคยเขียนโปรแกรมมาก่อน เริ่มจากศูนย์ ค่อยๆ ไป มีภาพให้ดูทุกขั้น แล้วมีควิซให้ลองตอบเช็คว่าเข้าใจจริงไหม
ยังไม่ต้องดูโค้ด · เข้าใจแนวคิดก่อน
ขาดอันใดอันหนึ่ง = โปรแกรมพัง · จำแค่ 2 คำนี้ก็เขียนได้แล้ว
if (n == 1) return 1; — รู้เลยว่า 1! = 1factorial(n - 1) — ส่ง n ที่ลดลงทีละ 1factorial(n) เท่าเดิม = ไม่มีวันถึงจุดหยุด พังเหมือนกันฟังก์ชัน(ปัญหา) {
ถ้า ปัญหาเล็กพอแล้ว → ตอบเลย ← Base Case
ไม่งั้น → เรียกตัวเองด้วย ปัญหาที่เล็กลง ← Recursive Step
}
สร้างฟังก์ชัน factorial จากศูนย์ · กด ▶ เพื่อเพิ่มทีละบรรทัด พร้อมคำอธิบายว่าบรรทัดนั้นทำอะไร
5 × 4 × 3 × 2 × 1 = 1205! = 5 × 4! · 4! = 4 × 3! · … ปัญหาใหญ่ประกอบด้วยปัญหาเดิมที่เล็กลง ← นี่แหละเหตุผลที่ใช้ recursion ได้
ส่วนที่คนงงมากที่สุด · ดูทีละ step แล้วจะเห็นว่ามันซ้อนลงไปก่อน แล้วค่อยคลายกลับขึ้นมา
factorial(5) คอมพิวเตอร์ ยังไม่ให้คำตอบทันทีfactorial เรียกตัวเอง 1 ครั้ง → เป็นเส้นตรง · fibonacci เรียก 2 ครั้ง → แตกเป็นกิ่งไม้
0, 1, 1, 2, 3, 5, 8, 13… — แต่ละตัว = ผลบวกของ 2 ตัวก่อนหน้าfib(0) = 0 และ fib(1) = 1fib(n) = fib(n-1) + fib(n-2) ← เรียกตัวเอง 2 ครั้งในรอบเดียวfib(2) ถูกคำนวณหลายรอบ ยิ่ง n ใหญ่ยิ่งช้าแบบทวีคูณint fibonacci(int n) {
// 1. Base Case
if (n == 0) return 0;
else if (n == 1) return 1;
// 2. Recursive Step
else return fibonacci(n - 1) + fibonacci(n - 2);
}
มีทั้งแบบเลือกตอบ, แบบทายผลลัพธ์, และแบบให้ลองอธิบายด้วยคำพูดตัวเอง — ตอบผิดไม่เป็นไร มีเฉลยอธิบายให้ทุกข้อ
สำหรับตอนขึ้นนำเสนอหน้าชั้น · ใส่รายชื่อครั้งเดียว เครื่องจำไว้ให้ (เปิดใหม่ก็ยังอยู่)
ทวนก่อนสอบ / ก่อนขึ้นนำเสนอ