บทนำ (Overview)
“Recursion” หรือ “Recursive function” เป็นลักษณะของการเขียนโปรแกรมด้วยเรียกฟังก์ชันเดิมซ้ำ จนถึงเงื่อนไขที่จะทำให้ยุติการเรียกใช้ฟังก์ชันเดิมอีกต่อไป แล้วผลของการ “Return” ฟังก์ชันสุดท้ายจะย้อนกลับไปเรื่อยจนถึงฟังก์ชันที่ใช้ครั้งแรก สาเหตุที่ต้องมีเงื่อนไขเพื่อยุติการเรียกใช้ฟังก์ชัน มิเช่นนั้นโปรแกรมจะไม่มีการเรียกตัวเองอย่างสิ้นสุด
ขั้นตอน (Steps)
- ทดสอบการเขียนโปรแกรมคำนวณ “Factorial” ตัวอย่างเช่น 5! หมายถึง 5 x 4 x 3 x 2 x 1 = 120 เป็น
[1]> (defun fac (n) (if (= n 0) 1 (* n (fac (- n 1))) ) ) FAC [2]> (fac 5) 120
- จากการเรียกใช้ฟังก์ชัน “Fac” ลักษณะการเรียกใช้ฟังก์ชันจะเป็นดังนี้
Fac5 => (* 5 (fac (- 5 1)))
(* 5 (* 4 (fac (- 4 1))))
(* 5 (* 4 (* 3 (fac (- 3 1)))))
(* 5 (* 4 (* 3 (* 2 (fac (- 2 1))))))
(* 5 (* 4 (* 3 (* 2 (* 1 (fac (- 1 1))))))) - จากตัวอย่างข้างต้นเห็นว่า จะมีเงื่อนไขสำหรับการยุติ คือเมื่อ n = 0 โปรแกรมจะนวณย้อนกลับดังนี้
Fac5 => (* 5 (* 4 (* 3 (* 2 (* 1 1)))))
(* 5 (* 4 (* 3 (* 2 1))))
(* 5 (* 4 (* 3 2)))
(* 5 (* 4 6))
(* 5 24)
120