Các bài viết trên wikipedia quá cao cấp để tôi hiểu, ai đó có thể cho tôi một lời giải thích đơn giản không?
Các bài viết trên wikipedia quá cao cấp để tôi hiểu, ai đó có thể cho tôi một lời giải thích đơn giản không?
Câu trả lời:
Bối cảnh của hai điều khoản nói chung là khác nhau.
Tự tham chiếu là trong ngữ cảnh của dữ liệu - bạn có một loại dữ liệu có chứa một tham chiếu đến một cái gì đó cùng loại.
Đệ quy nằm trong ngữ cảnh của mã - bạn có một hàm hoặc thủ tục tự gọi nó.
Thí dụ:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
Đây là một hàm đệ quy (trong C):
unsigned int fibonacci(unsigned int n)
{
unsigned int result = 1;
if (n > 1)
result = fibonacci(n - 1) + fibonacci(n - 2);
return result;
}
Hai cuộc gọi đến fibonacci()
bên trong fibonacci()
hàm là các cuộc gọi đệ quy .
Đây là cấu trúc dữ liệu tự tham chiếu :
struct ListNode {
char *data;
struct ListNode *next;
}
Phần tử đầu tiên, data
chỉ là một con trỏ tới một loại dữ liệu nào đó. Phần tử thứ hai next
, là một con trỏ đến ListNode
cấu trúc khác . Nếu bạn có hai hoặc nhiều ListNode
cấu trúc, bạn có thể đặt next
con trỏ của một thành địa chỉ của một cấu trúc khác, v.v. và sau đó bạn có một danh sách được liên kết . Cấu trúc là tự tham chiếu vì định nghĩa của cấu trúc đề cập đến chính nó. Nếu bạn muốn trở nên điên rồ, bạn có thể làm điều này:
struct ListNode *node = malloc(sizeof(struct ListNode));
node->data = someString;
node->next = node;
Bây giờ bạn đã có một loại tham chiếu bản thân khác - đó không chỉ là định nghĩa của struct ListNode
chính nó ... bạn đã đặt next
con trỏ trỏ node
đến node
chính nó. Đây là một danh sách liên kết tròn chỉ chứa một yếu tố. Dễ thương, nhưng không hữu ích lắm. Tôi đề cập đến nó bởi vì nó là một loại tự tham chiếu, nhưng đó không phải là ý nghĩa của mọi người khi họ nói về các kiểu dữ liệu tự tham chiếu.
Các cuộc thu hồi, hầu hết là hữu ích, dự kiến sẽ chấm dứt sau một số thủ tục nhất định theo nghĩa là có một số giá trị ban đầu. trừ khi bạn có một đệ quy xấu mà vô dụng.
Tự tham khảo, bản thân chúng không chính xác thu hồi nhưng có thể được hiển thị để có đệ quy trong trường hợp chúng thường không bao giờ chấm dứt.
Đệ quy hàm ý hành động.
Ví dụ:
Về mặt kỹ thuật, đệ quy nên có trạng thái thoát nhưng đó không phải là một yêu cầu.
Tự tham khảo ngụ ý cấu trúc.
Ví dụ. Một phương thức thể hiện tham chiếu đến đối tượng mà nó được đính kèm.
Đệ quy yêu cầu một cái gì đó để xử lý thông qua việc gọi cùng một quá trình (thường với các tham số khác nhau). Mặc dù bạn thường sử dụng các chức năng và các chức năng đó tự gọi mình, nhưng về mặt kỹ thuật, chúng bước vào một bước mới trông giống như nơi chúng vừa đến.
Tự tham khảo có nghĩa là một cái gì đó đề cập đến chính nó. Các lớp học có thể tự tham chiếu bằng cách sử dụng this
, nhưng điều đó không có ý nghĩa đệ quy.
recursion
đề cập đến một hàm gọi chính nó trong khiself-reference
đề cập đến một đối tượng tham chiếu chính nó.