Java Recursion คืออะไร?
สถานการณ์ที่ฟังก์ชันหรือเมธอดเรียกตัวเองว่าการเรียกซ้ำ และฟังก์ชันหรือเมธอดดังกล่าวเรียกว่าฟังก์ชันแบบเรียกซ้ำหรือวิธีการเรียกซ้ำ แนวทางนี้มักจะใช้เพื่อแยกปัญหาที่ซับซ้อนให้เป็นปัญหาที่ง่ายและเขียนได้ง่ายกว่า ตัวอย่างง่ายๆ คือ วางกระจก 2 บานไว้หน้ากัน จากนั้นกระจกจะเริ่มสะท้อนกันแบบวนซ้ำ ซึ่งคุณสามารถมองเห็นได้ง่ายการเรียกซ้ำทางอ้อม
ตัวอย่างข้างต้นแสดงถึงการเรียกซ้ำทางอ้อมนั่นคือ ฟังก์ชันหนึ่งเรียกใช้ฟังก์ชันที่สอง และฟังก์ชันที่สอง การเรียกฟังก์ชันหนึ่งการเรียกซ้ำโดยตรง
เมื่อเมธอดเรียกตัวเองซ้ำแล้วซ้ำเล่า จะเรียกว่าการ เรียกซ้ำโดยตรงสภาพการหยุดชะงัก
ตอนนี้คุณจะคิดว่าหากมีการเรียกเมธอดตัวเองซ้ำแล้วซ้ำอีก จะต้องพบกับข้อผิดพลาด Stack Overflow ใช่ คุณพูดถูก เหมือนกับการวนซ้ำแบบไม่มีที่สิ้นสุด มันสามารถไปสู่การเรียกซ้ำแบบไม่มีที่สิ้นสุดได้ เราต้องจัดเตรียมเงื่อนไขพื้นฐานหรือเงื่อนไขการสิ้นสุดเพื่อหยุดการเรียกซ้ำแบบไม่สิ้นสุดนี้ ซึ่งเรียกว่าเงื่อนไขการหยุด และเงื่อนไขนี้จะระบุไว้ในวิธีการเรียกซ้ำเสมอ ซึ่งเราจะเห็นรายละเอียดในตัวอย่างด้านล่างตัวอย่างการเรียกซ้ำ
class Recursion {
static int factorial( int n ) {
// base condition or termination condition
if (n != 0)
// here we are calling the recursive method
return n * factorial(n-1);
else
return 1;
}
public static void main(String[] args) {
// initializing the variables
int number = 5, result;
result = factorial(number);
System.out.println(number + " factorial = " + result);
// changing the value from 5 to 10
number = 10;
result = factorial(number); // recursive function call
System.out.println(number + " factorial = " + result);
}
}
ตัวอย่างเอาท์พุต
5 แฟคทอเรียล = 120 10 แฟคทอเรียล = 3628800
ในตัวอย่างวิธีการเรียกซ้ำนี้ เรามีฟังก์ชันแฟกทอเรียลที่ถูกเรียกจากวิธีหลัก เราส่งผ่านค่า 5 เพื่อดูว่าแฟคทอเรียลคืออะไร ซึ่งก็คือ 120 ฟังก์ชันแฟกทอเรียลนี้เรียกตัวเองอีกครั้งโดยส่งค่า 4 ซึ่งเรียกอีกครั้งและส่งผ่านค่า 3 อีกครั้ง และต่อไปเรื่อยๆ จนกว่าเงื่อนไขการหยุดคือ พบซึ่งก็คือค่า 0 สิ่งเดียวกันนี้เกิดขึ้นเมื่อเราเปลี่ยนค่าจาก 5 เป็น 10
GO TO FULL VERSION