system: You are a trustworthy AI assistant. Your task is to answer the question honestly and not fabricate information.

user: Mình cần thông tin của Đệ quy (tin học) á

assistant: Đệ quy (tiếng Anh: "recursion") là phương pháp dùng trong các chương trình máy tính trong đó có một hàm tự gọi chính nó.
Khái niệm hình thức về đệ quy.
Trong toán học và khoa học máy tính, các tính chất (hoặc cấu trúc) được gọi là đệ quy nếu trong đó một lớp các đối tượng hoặc phương pháp được xác định bằng việc xác định một số rất ít các trường hợp hoặc phương pháp đơn giản (thông thường chỉ một) và sau đó xác định quy tắc đưa các trường hợp phức tạp về các trường hợp đơn giản.
Chẳng hạn, định nghĩa sau là định nghĩa đệ quy của tổ tiên:
Các định nghĩa kiểu như vậy cũng thường thấy trong toán học (chính là quy nạp toán học)
Định nghĩa theo đệ quy.
Một khái niệm X được định nghĩa theo đệ quy nếu trong định nghĩa X có sử dụng ngay chính khái niệm X.
Đệ quy trong khoa học máy tính.
Có một phương pháp chung để giải các bài toán là chia bài toán thành các bài toán con đơn giản hơn cùng loại. Phương pháp này được gọi là Thuật toán chia để trị. Chính nó là chìa khóa để thiết kế nhiều giải thuật quan trọng, là cơ sở của quy hoạch động.
Một ví dụ cổ điển của đệ quy là hàm giai thừa cho bằng giả mã trong C hoặc C++ sau đây:
int factorial(n) 
 if (n &lt;= 1)
 return 1;
 else
 return n * factorial(n-1);
Một ví dụ khác của giải thuật đệ quy là thủ tục duyệt (nghĩa là thực hiện một công việc nào đó với chúng) tất cả các nút của một cấu trúc dữ liệu cây:
 procedure ProcessTree(node)
 ProcessNode(node); // thực hiện một thuật toán riêng với nút đầu
 for each child_node of node do ProcessTree(child_node);
Để duyệt một cây, gọi thủ tục này với nút gốc của cây như một tham biến khởi tạo. Tiếp theo, thủ tục gọi đệ quy đến chính nó cho tất cả các nút con của nút vừa gọi (nghĩa là các cây con của cây vừa gọi), cho đến khi gặp trường hợp cơ bản nghĩa là nút không có con (thường gọi là "lá").
Chính cấu trúc cây cũng được định nghĩa bằng đệ quy như sau:
 struct node
 child_nodes: list&lt;node&gt;;
 struct tree
 root: node;
Cây được biểu diễn bằng một nút gốc và danh sách các nút con của nút ấy. Mỗi nút con lại có danh sách các nút con của nó (và như vậy, nó là gốc của một cây con). "Lá" với danh sách rỗng các nút con là trường hợp cơ sở của nút.
Chương trình con đệ quy.
Trong lập trình, có khái niệm: một chương trình con (hàm, thủ tục) được gọi là đệ quy nếu trong quá trình thực hiện nó có phần phải gọi đến chính nó.
Cấu trúc chính.
Một chương trình con đệ quy căn bản gồm hai phần.
Ví dụ: Hàm tính giai thừa của một số tự nhiên n (tính formula_1) (Đoạn mã sau được viết bằng ngôn ngữ Pascal)
 function factorial(n: Word): Longint;
 begin
 if n = 0 then
 exit(1)
 else
 exit(n*(factorial(n-1)));
 end;
Quy trình thực hiện.
Trong ví dụ trên, quy trình thực hiện như sau:
 n:= factorial(3);
 factorial(3):= 3 * factorial(2); và đi tính gt(2)
 factorial(2):= 2 * factorial(1); và đi tính gt(1)
 factorial(1):= 1; 
 factorial(2):= 2 * 1; cho kết quả là 2
 factorial(3):= 3 * 2; cho kết quả là 6
Đệ quy tương hỗ.
Nếu có hai chương trình con A1 và A2 gọi nhau ta có đệ quy tương hỗ.
Đệ quy tương hỗ thường được dùng để duyệt cây theo chiều sâu.
type B(...);
type A(...)
 B(...);
type B(...)
 A(...);