การวน loop แบบ Recursion ใน JAVA
ปกติเราจะชินกับการใช้ for loop, while, do..while อะไรพวกนี้เนาะ แต่มันมีการวน loop อีกแบบหนึ่งที่เรียกว่า “Recursion” เป็นการเขียนฟังก์ชั่นแบบเรียกใช้ตัวมันเอง
จริงๆรูปแบบการนำมาใช้งาน อะไรที่สามารถเขียนเป็น loop ปกติได้ ตัว Recursion ก็สามารถเขียนได้เสมอ แล้วอะไรบ้างที่จะมีการนำเอา Recursion ไปใช้
ยกตัวอย่าง
- การหาเลขยกกำลัง
2 ^1 = 2
2 ^2 = 4
2 ^3 = 8
แบบนี้ก็สามารถนำมาเขียนแบบ Recursion ได้โดยมีเลข 2 กำหนดการคูณกับตัวมันเองซ้ำๆไปเรื่อยๆตามจำนวนเลขยกกำลังที่ต้องการ - การหาเลขอนุกรม ที่มีลำดับการบวกของ n ที่แน่นอน
100 + 99 + 98 + 97 + … + 1
จัดรูปได้เป็น n + (n — 1) + (n — 2) + (n — 3) + … + 1 - การหาดอกเบี้ยทบต้น
เมื่อ A = จำนวนเงินรวมทั้งหมด
P = จำนวนเงินต้น
r = ดอกเบี้ยต่องวด ต่อร้อย
n = จำนวนงวด
สมมติ นาย A มีเงินต้นอยู่ 5000 บาท ต้องส่งทุกปีให้ธนาคาร คิดเป็นดอกเบี้ย 1.25% ต่อปี ถามว่าครบปีที่ 5 นาย A ต้องจ่ายเท่าไร
จุดสำคัญเวลาเราคิดฟังก์ชั่น คือต้องหาจุดสิ้นสุดของมันให้เจอก่อนหรือจุดวกกลับที่จะทำให้มันเรียกตัวมันเองซ้ำ ในที่นี้ก็คือเงินต้น ไม่งั้นมันก็จะทำ loop ไปเรื่อย โจทย์ให้หาถึงปีที่ 5 แสดงว่าต้องเริ่มตั้งแต่ปีแรกเลยคือปีที่ 0 ทำไปเรื่อยๆ ก็อาจจะตั้งเงื่อนไขว่า year ≥ 0 ก็ได้ แล้วให้ year ค่อยๆลดลง
r = 1.25, year = 5, P=5000
ในแต่ละปี ค่า P จะถูกเปลี่ยนไป จาก r ที่ยกกำลังตามจำนวนปี
ปีที่ 0 ก็จะเป็น A = P*r
ปีที่ 1 ก็จะเป็น A = P*r*r
ปีที่ 2 ก็จะเป็น A = P*r*r*r
ลองมาเขียนเป็นฟังก์ชั่นตามสูตรคณิตศาสตร์กัน ซึ่งในที่นี้เราตั้งให้มันชื่อ expo
อันนี้ก็จะเป็นการส่งค่าจาก main มาสามตัวให้กับฟังก์ชั่นชื่อ expo พอรับค่ามามันจะเช็คเงื่อนไขปีก่อน ปีแรกก็ต้องปีที่ 0 แน่นอน แล้วทำการปริ้นค่าเดิมออกมา คือ money = 5000 แล้วจึงทำการเอา money*rate แล้ว return money ค่าใหม่ไป
ทุกรอบ ในแต่ละรอบจะเหมือนการคูณ rate เข้าไปเพิ่มทีละตัว โดยบังคับในฟังก์ชั่น expo ว่าให้ year-1 เป็นการเรียกใช้ฟังก์ชั่นภายในของตัวมันเอง ซึ่งจะได้ผลลัพธ์ออกมาแบบนี้ เหมือนกับ loop ทั่วๆไป
หรือถ้าอยากใช้เป็น while loop ก็ทำได้เหมือนกัน เงื่อนไขก็จะเหมือนกันเลย