Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การสร้าง MySQL Stored Procedure คำนวณแฟกทอเรียล (Factorial) แบบ Recursive

ตัวอย่างการสร้าง Stored Procedure คำนวณแฟกทอเรียล (n!) โดยใช้การเรียกซ้ำ (Recursion) ใน MySQL ต้องตั้งค่า max_sp_recursion_depth ก่อน

โค้ด Stored Procedure ทั้งหมด

DELIMITER //

CREATE PROCEDURE get_factorial(IN N INT)
BEGIN
  SET @@GLOBAL.max_sp_recursion_depth = 255;
  SET @@SESSION.max_sp_recursion_depth = 255;
  
  CALL factorial_recursive(N, @factorial);
  SELECT @factorial;
END //

CREATE PROCEDURE factorial_recursive(IN N INT, OUT factorial INT)
BEGIN
  IF N = 1 THEN
    SET factorial := 1;
  ELSE
    CALL factorial_recursive(N - 1, factorial);
    SET factorial := N * factorial;
  END IF;
END //

DELIMITER ;

การทดสอบ

mysql> CALL get_factorial(10);
+--------------+
| @factorial   |
+--------------+
| 3628800      |
+--------------+

mysql> CALL get_factorial(5);
+-------------+
| @factorial  |
+-------------+
| 120         |
+-------------+

คำอธิบาย:

  • max_sp_recursion_depth - ความลึกสูงสุดของการเรียกซ้ำ (Default = 0 = ปิด) ต้องตั้งให้มากพอสำหรับค่า N ที่ต้องการ
  • get_factorial - Procedure หลัก รับ N ส่งต่อให้ factorial_recursive
  • factorial_recursive - Procedure เรียกซ้ำ คำนวณ n! = n × (n-1)!
  • ใช้ OUT parameter ส่งค่ากลับ

ข้อควรระวัง: Recursion ใน MySQL SP มีขีดจำกัดประสิทธิภาพและความลึก ไม่เหมาะกับค่า N ใหญ่มาก ควรพิจารณา Iterative Approach หรือคำนวณที่ Application Layer แทน