# การใช้งาน Recursive Function ในภาษา ABAP อย่างมีประสิทธิภาพ
ภายในโลกของการเขียนโปรแกรม เทคนิคหนึ่งที่ดูเหมือนซับซ้อนแต่มีพลังมหาศาลคือการใช้งาน "Recursive Function" หรือ "ฟังก์ชันเรียกตัวเอง" ที่ในภาษา ABAP ที่ว่ากันว่าเป็นหลักในการทำงานของระบบ SAP ฟังก์ชันประเภทนี้มีความสำคัญอย่างยิ่งในกระบวนการทำงานที่ต้องการการประมวลผลแบบ iterative หรือลูปที่มีการเรียกใช้งานซ้ำแล้วซ้ำอีกในลักษณะของตัวมันเอง โดยที่ไม่จำเป็นต้องเขียนโค้ดซ้ำเติมจนเกินไป
หากคุณเป็นนักพัฒนา ABAP หรือผู้ที่สนใจด้านการเขียนโปรแกรมที่ยงกระหายในความรู้ และอยากทำความเข้าใจว่า Recursive Function ใช้งานอย่างไร ภายในบทความนี้จะพาทุกท่านไปสัมผัสกับตัวอย่างโค้ดง่ายๆ เพื่อให้เห็นภาพชัดเจนของการใช้งาน และอธิบายการทำงานผ่าน usecase ในชีวิตจริง เพื่อตอบสนองทุกโจทย์การเรียนการสอนที่ EPT (Expert-Programming-Tutor)
ก่อนที่เราจะไปสู่ตัวอย่างโค้ดของ Recursive Function ใน ABAP ควรทำความเข้าใจกันก่อนว่ามันคืออะไร ฟังก์ชันเรียกตัวเองคือฟังก์ชันที่มีการเรียกใช้งานตัวมันเองในขณะที่มันยังคงทำงานอยู่ ทำให้สามารถจัดการกับปัญหาที่นำเสนอในรูปแบบที่ซับซ้อนหรือควรจะแก้ไขผ่านลำดับขั้นที่มีลักษณะย้อนกลับ
ตัวอย่างที่ 1: การคำนวณ Factorial
FUNCTION factorial.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"* IMPORTING
*"* VALUE(NUMBER) TYPE I
*"* EXPORTING
*"* VALUE(RESULT) TYPE I
*"* EXCEPTIONS
*"* FACTORIAL_OF_NEGATIVE_NUM
*"* FACTORIAL_OF_NON_INTEGER
*"----------------------------------------------------------------------
IF number = 0 OR number = 1.
result = 1.
ELSEIF number < 0.
RAISE factorial_of_negative_num.
ELSE.
CALL FUNCTION 'FACTTORIAL' "เรียกใช้งาน Recursive Function
EXPORTING
number = number - 1
IMPORTING
result = result.
result = number * result.
ENDIF.
ENDFUNCTION.
ในตัวอย่างนี้เราได้ประกาศฟังก์ชัน `factorial` ซึ่งเป็นฟังก์ชันเพื่อคำนวณค่าของตัวเลขแบบ factorial (n!) หากค่าของ `NUMBER` น้อยกว่าหรือเท่ากับ 1 ฟังก์ชันจะคืนค่าเป็น 1 แต่ถ้าไม่เช่นนั้น มันจะเรียกใช้งานตัวมันเองและคูณด้วย `NUMBER` จนกว่าจะได้ผลลัพธ์ที่ต้องการ
ตัวอย่างที่ 2: การค้นหาข้อมูลด้วย Binary Search
FUNCTION binary_search.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"* IMPORTING
*"* VALUE(INPUT_DATA) TYPE I
*"* VALUE(LOW) TYPE I
*"* VALUE(HIGH) TYPE I
*"* VALUE(KEY) TYPE I
*"* EXPORTING
*"* VALUE(FOUND) TYPE BOOLEAN
*"* EXCEPTIONS
*"* KEY_NOT_FOUND
*"----------------------------------------------------------------------
DATA: middle TYPE I.
IF low > high.
RAISE key_not_found.
ELSE.
middle = (low + high) / 2.
IF input_data[middle] = key.
found = abap_true.
ELSEIF key < input_data[middle].
CALL FUNCTION 'BINARY_SEARCH'
EXPORTING
input_data = input_data
low = low
high = middle - 1
key = key
IMPORTING
found = found.
ELSE.
CALL FUNCTION 'BINARY_SEARCH'
EXPORTING
input_data = input_data
low = middle + 1
high = high
key = key
IMPORTING
found = found.
ENDIF.
ENDIF.
ENDFUNCTION.
การค้นหาแบบ binary search เป็นวิธีการที่มีประสิทธิภาพสำหรับการค้นหาข้อมูลภายใน array ที่ถูกเรียงลำดับเรียบร้อยแล้ว ในกรณีนี้ `binary_search` ฟังก์ชันเรียกใช้งานตัวมันเองด้วยค่าที่ต่างกันเพื่อค้นหา `KEY` ที่ต้องการ
ตัวอย่างที่ 3: การเดินทางผ่าน Tree Structure
*" กำหนดโครงสร้างของ Node
TYPES: BEGIN OF ty_tree,
value TYPE I,
left TYPE REF TO ty_tree,
right TYPE REF TO ty_tree,
END OF ty_tree.
FUNCTION traverse_tree.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"* IMPORTING
*"* VALUE(NODE) TYPE REF TO ty_tree
*"* EXCEPTIONS
*"* TREE_EMPTY
*"----------------------------------------------------------------------
CHECK node IS NOT INITIAL.
IF node-left IS NOT INITIAL.
CALL FUNCTION 'TRAVERSE_TREE'
EXPORTING
node = node-left.
ENDIF.
"ทำการประมวลผลกับ node.value ที่นี่
IF node-right IS NOT INITIAL.
CALL FUNCTION 'TRAVERSE_TREE'
EXPORTING
node = node-right.
ENDIF.
ENDFUNCTION.
ในตัวอย่างนี้ได้อธิบายถึง recursive function ที่ใช้สำหรับการเดินทางภายในโครงสร้างแบบ Tree เพื่อการเข้าถึงข้อมูลหรือการทำอะไรก็ตามที่เราต้องการทำกับแต่ละ node ของ Tree โดยที่ไม่จำเป็นต้องใช้ loop อยู่บ่อยๆ
การใช้ recursive function ในโลกจริงอาจพบได้บ่อยในกรณีของการจัดการกับ structure ที่มีลักษณะเป็น hierarchical ตัวอย่างเช่นการจัดการกับ organizational chart ในบริษัท หรือการคำนวณสูตรคำนวณที่มีความซับซ้อน เช่น การคำนวณดอกเบี้ยทบต้น ซึ่งอาจต้องระบุขั้นตอนย้อนกลับหากดอกเบี้ยเป็นแบบเรียกเก็บย้อนหลังไปเรื่อยๆ
สำหรับผู้ที่ต้องการพัฒนาฝีมือการเขียนโปรแกรมให้มีความเข้าใจลึกซึ้งยิ่งขึ้น การเรียนรู้และทดลองใช้งาน recursive function เป็นประสบการณ์ที่มีค่าไม่แพ้เทคนิคการเขียนโปรแกรมอื่นๆ และที่ EPT (Expert-Programming-Tutor) เรามีหลักสูตรที่จะทำให้คุณประสบความสำเร็จในการใช้งาน ABAP และการเขียนโค้ดแบบมืออาชีพได้อย่างมั่นใจ ทำไมไม่ใช้เวลานี้เพื่อลงทะเบียนและเริ่มการเดินทางสู่โลกของการเขียนโปรแกรมที่น่าตื่นเต้นไปกับเราล่ะ?
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: recursive_function abap programming factorial binary_search tree_structure algorithm sap programming_language code_example
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM