Python Recursive Function

   อัปเดตล่าสุด Feb. 2, 2024

การเรียกใช้ฟังก์ชัน (Recursion) หรือที่เราเรียกว่า Recursive Function คือ การที่ฟังก์ชันใดฟังก์ชันหนึ่งสามารถเรียกใช้ฟังก์ชันอื่น ๆ ภายในตัวมันเอง โครงสร้างประเภทนี้เรียกว่าฟังก์ชัน Recursion


ข้อดีของฟังก์ชัน Recursive

  • โค้ดดูคลีน
  • สามารถแบ่งงานที่ซับซ้อนออกเป็นงานย่อย ๆ ง่ายขึ้นด้วยการใช้ recursion
  • การสร้างลำดับ (Sequence Generation) ง่ายขึ้นด้วย recursion มากกว่าการใช้การวนซ้ำที่ซับซ้อน


ข้อเสียของฟังก์ชัน Recursive

  • บางครั้งลอจิกของ Recursion อาจยากต่อการติดตาม
  • การเรียกใช้ฟังก์ชัน Recursive มีราคาที่ต้องจ่าย (และอาจไม่มีประสิทธิภาพ) เพราะใช้หน่วยความจำและเวลามาก
  • ยากต่อการแก้ไขบั๊ก


ตัวอย่าง 1: ฟังก์ชัน Recursive แบบง่าย

การเรียกใช้ฟังก์ชัน recursive จะสิ้นสุดเมื่อตัวเลขลดลงมาเป็น 1 นี่คือเงื่อนไขพื้นฐาน (base condition) ทุกฟังก์ชัน recursive ต้องมีเงื่อนไขพื้นฐานที่หยุดการเรียกใช้ซ้ำ ไม่เช่นนั้นฟังก์ชันจะเรียกตัวเองอย่างไม่มีที่สิ้นสุด

def factorial(x):
"""
ฟังก์ชัน recursive นี้ใช้สำหรับหาค่า factorial ของจำนวนเต็ม
"""
if x == 1:
return 1
else:
return(x * factorial(x-1))

num = 3 # 3 * 2 * 1
print("ค่า factorial ของ", num, "คือ", factorial(num))


อธิบายโค้ด func  

  • สร้างฟังก์ชัน  factorial(x) เพื่อคำนวณหาค่า factorial ของตัวเลข  x
  • ค่า factorial ของตัวเลขใดตัวเลขหนึ่งหมายถึงผลคูณของตัวเลขนั้นกับตัวเลขที่น้อยลงไปเรื่อย ๆ จนถึง 1 เช่น factorial ของ 3 คือ  3 * 2 * 1 เป็นต้น
  • จากฟังก์ชัน เริ่มต้นด้วยการตรวจสอบว่าค่า x เท่ากับ 1 หรือไม่ ถ้าใช่ฟังก์ชันจะ return (คืนค่า)  1 เนื่องจาก factorial ของ 1 คือ 1
  • ถ้า  x ไม่เท่ากับ  1 ฟังก์ชันจะคืนค่า x คูณกับค่าของ factorial(x-1) และนี่คือขั้นตอนการเรียกใช้ฟังก์ชัน recursive ที่ทำให้ x ลดลงทีละหนึ่งจนกว่าจะถึง 1 
  • ในท้ายที่สุดฟังก์ชันนี้จะคืนค่าผลคูณของ x กับ factorial ของ x - 1 ซึ่งเป็นวิธีการคำนวณค่า factorial แบบดั้งเดิม


เมื่อเราเรียกใช้ฟังก์ชัน  factorial(x) ด้วยค่า num = 3 ฟังก์ชันจะทำการคำนวณ factorial ของ 3 ซึ่งเป็น 3 * 2 * 1 และคืนค่า 6 กลับมา ซึ่งเป็นผลรวมนั่นเอง

การใช้งานฟังก์ชัน recursive ในตัวอย่างนี้แสดงให้เห็นถึงวิธีการแก้ไขปัญหาที่สามารถแบ่งย่อยลงไปเป็นปัญหาย่อย ๆ ที่ง่ายกว่า และเป็นหนึ่งในตัวอย่างพื้นฐานที่นิยมใช้เพื่อสาธิตการทำงานของฟังก์ชัน recursive ในการเขียนโปรแกรม