Recursive function คืออะไร ใช้งานอย่างไรในภาษาจาวา

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Recursive function คืออะไร ใช้งานอย่างไรในภาษาจาวา

โพสต์ที่ยังไม่ได้อ่าน โดย WKsoft »

การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ต่างๆ เช่น ภาษาC php python javaและอื่นๆ ย่อมมีการเรียกใช้งานฟังก์ชันมาใช้ในการทำงานบางอย่างซึ่งบางครั้ง การทำงานของฟังก์ชันก็อาจจะมีการเรียกใช้งานตัวของมันเอง มาดูกันว่าคืออะไรและการทำงานของมันเป็นอย่างไร

Recursive function คือ ฟังก์ชันเรียกใช้งานตัวเอง เรียกว่า ฟังก์ชันเรียกซ้ำ เพื่อทำงานบางอย่าง การทำงานของมันจะทำโดยการแบ่งปัญหาออกเป็นส่วนย่อยที่เล็กลง แล้วแก้ปัญหาเหล่านั้นให้ได้ผลลัพธ์ แล้วทำการรวมผลลัพธ์ที่ได้ทั้งหมดเข้าด้วยกันซึ่งการทำงานโดยการแบ่งส่วนงานย่อยนี้ จะช่วยทำให้การแก้ปัญหาทำได้ง่ายขึ้นเนื่องจากปัญหาถูกแบ่งย่อยให้เล็กลง รูปแบบการแก้ปัญหานี้เรียกว่า Divide and Conquer

การเขียนโปรแกรมด้วยการใช้งาน Recursive function จะเรียกใช้งานตัวเองจนพบกับเงื่อนไขที่ต้องการเพื่อที่จะหยุดเรียกการใช้งานตัวเอง ส่วนนี้จะสำคัญในการออกแบบฟังก์ชัน เพื่อไม่ให้เกิดการทำงานแบบไม่สิ้นสุดฉะนั้นการออกแบบควร กำหนดเงื่อนไขให้ชัดเจนเพื่อหยุดการทำงาน

ตัวอย่างการทำงานแบบเรียกซ้ำของ 5!
ตัวอย่างการทำงานแบบเรียกซ้ำของ 5!.png
ตัวอย่างการทำงานแบบเรียกซ้ำของ 5!.png (61.43 KiB) Viewed 3133 times
ตัวอย่างการเขียนฟังก์ชันแบบ Recursive ด้วยภาษาจาวา

โค้ด: เลือกทั้งหมด

import java.util.Scanner;
public class Factorial{

     public static void main(String []args){
        Scanner input = new Scanner(System.in);//ตัวสแกนเนอร์ สร้างเพื่อใช้รับค่าทางคีย์บอร์ด
        System.out.print("Enter number: ");
        int number = input.nextInt();//รับค่าทางคีย์บอร์ด
        int result = factorial(number);//สร้างตัวแปรสำหรับรับค่าที่คืนกลับมาของฟังก์ชัน factorial
        System.out.print(result);//แสดงผลลัพธ์ที่ได้
     }
     
     public static int factorial(int n){
         if(n == 0){//หากค่า n = 0 ส่งค่า 1กลับ เป็นเงื่อนไขการจบการเรียกตัวเองซ้ำ
             return 1;
         }else{//หากค่า n != 0  นำ n คูณกับ ค่าที่จะคืนกลับมาของฟังก์ชัน factorial พารามิเตอร์ที่ส่งไปจะเป็นค่า n-1
             return n * factorial(n-1);
         }
     }
}
ผลลัพธ์
จากโค้ดผมได้ทำการสั่งค่า เลข 10 ไปหาค่าแฟกทอเรียล และได้ผลลัพธ์มาดังนี้
ผลลัพธ์10!.png
ผลลัพธ์10!.png (2.18 KiB) Viewed 3133 times
ข้อดี
  • การกำหนดค่าตัวแปร ง่ายและสั้นกว่าฟังก์ชันแบบวนซ้ำ
  • ปัญหาบางอย่างเป็นปัยหาที่ต้องใช้ฟังก์ชันแบบเรียกซ้ำในการแก้ปัญหา เช่น graph(กราฟ) , tree traverdsal(การท่องไปในต้นไม้)
ข้อเสีย
  • ฟังก์ชันแบบเรียกซ้ำใช้มีความต้องการการใช้พื้นที่มากกว่าแบบวนซ้ำ เพราะ การทำงานของฟังก์ชันจะยังไม่เสร็จ
    ยังค้างไว้แต่ข้ามไปทำอันต่อไปก่อน จะเสร็จก็ต่อเมื่อพบเงื่อนไขที่ได้กำหนดไว้
การใช้เวลาที่อาจจะมากขึ้น ทุกครั้งที่มีการเรียกซ้ำการทำงาน รวมไปถึง ค่าต่างๆที่ต้องต้องคำนวณย้อนกลับทีละตัว
เมื่อพบเงื่อนไข


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

อ้างอิง
https://www.makeuseof.com/what-is-a-recursive-function-and-how-do-you-create-one-in-java/
https://www.educative.io/courses/recursion-for-coding-interviews-in-cpp/qAx1lwQYDNG
https://www.slideshare.net/wongyos/tutor11
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 73