Tại sao các hàm tính toán còn được gọi là hàm đệ quy?


23

Trong lý thuyết tính toán, các hàm tính toán còn được gọi là các hàm đệ quy. Ít nhất là từ cái nhìn đầu tiên, họ không có gì chung với cái mà bạn gọi là "đệ quy" trong lập trình hàng ngày (nghĩa là các hàm gọi chúng là chính họ).

Ý nghĩa thực sự của đệ quy trong bối cảnh tính toán là gì? Tại sao các chức năng đó được gọi là "đệ quy"?

Nói cách khác: mối liên hệ giữa hai ý nghĩa của "đệ quy" là gì?



3
Họ gian lận, bởi vì họ bao gồm toán tử . Đây là một toán tử tối thiểu hóa, nhưng tất nhiên tối thiểu hóa có rất ít liên quan đến đệ quy. Vì vậy, có vẻ như ai đó (Kleene) nghĩ rằng "đệ quy" nghe có vẻ hay, vì vậy anh ta đã phát minh ra một cái cớ để sử dụng tên đó. Rất lâu sau, Robert Soare giải thích rằng "tính toán" nghe có vẻ tốt hơn nhiều và rằng "đệ quy" chỉ là một mánh khóe tiếp thị của những ngày đầu, và mọi người đều đồng ý.
Thomas Klimpel

3
Waht về chức năng đệ quy nguyên thủy? Sao chép từ wikipedia chúng được định nghĩa là h(0,x1,,xk)=f(x1,,xk)h(S(y),x1,,xk)=g(y,h(y,x1,,xk),x1,,xk) . Đó là một chức năng gọi chính nó.
Hendrik ngày

3
@GoloRoden Lưu ý rằng mô tả thẻ của 'khả năng tính toán' (bạn đã sử dụng nó cho câu hỏi này) nói: "lý thuyết tính toán hay còn gọi là lý thuyết đệ quy". Gôdel gọi là hàm đệ quy , nhưng thuật ngữ đã phát triển thành tính toán . Có lẽ để tránh nhầm lẫn như của bạn. Những người nghiên cứu lý thuyết tính toán (chuyên sâu) có xu hướng sử dụng thuật ngữ đệ quy thuật ngữ nhiều hơn để 'tôn trọng' gốc rễ của nó.
Auberon

1
bởi vì chúng được định nghĩa đệ quy, tức là " các hàm phức tạp hơn được định nghĩa theo các hàm đơn giản hơn, được xác định trước đó "
Nikos M.

Câu trả lời:


13

Xác định một số chức năng cơ bản:

  • hàm không

    zero:NN:x0
  • chức năng kế nhiệm

    succ:NN:xx+1
  • chức năng chiếu

pin:NnN:(x1,x2,,xn)xi

Từ giờ tôi sẽ sử dụng để biểu thị ( x 1 , x 2 , Lỗi , x n )xn¯(x1,x2,,xn)

Xác định một thành phần:

Hàm đã cho

  • mỗi chữ ký N kNg1,g2,,gmNkN
  • f:NmN

Xây dựng chức năng sau:

h:NkN:xk¯h(xk¯)=f(g1(xk¯),g2(xk¯),,gm(xk¯))

Xác định đệ quy nguyên thủy:

Hàm đã cho

  • f:NkN
  • g:Nk+2N

Xây dựng hàm (piecewise) sau:

h:Nk+1N:(xk¯,y+1){f(xk¯),y+1=0g(xk¯,y,h(xk¯,y)),y+1>0

Tất cả các hàm có thể được thực hiện bằng cách sử dụng các tác phẩmđệ quy nguyên thủy trên các hàm cơ bản , được gọi là đệ quy nguyên thủy . Nó được gọi theo cách đó theo định nghĩa. Trong khi một liên kết với các chức năng tự gọi là tồn tại, không cần phải thử và liên kết chúng với nhau. Bạn có thể coi đệ quy là một từ đồng âm.

Định nghĩa và cấu trúc ở trên được xây dựng bởi Gôdel (một vài người khác cũng tham gia) trong nỗ lực nắm bắt tất cả các chức năng có thể tính toán được, tức là có Turing Machine cho chức năng đó. Lưu ý rằng khái niệm về Máy Turing chưa được mô tả hoặc ít nhất là rất mơ hồ.

(Un) may mắn thay, một người được gọi là Ackermann đã đến và định nghĩa chức năng sau:

  • Ack:N2N
  • Ack(0,y)=y+1
  • Ack(x+1,0)=Ack(x,1)
  • Ack(x+1,y+1)=Ack(x,Ack(x+1,y))

Chức năng này có thể tính toán được, nhưng không có cách nào để xây dựng nó chỉ bằng cách sử dụng các công trình trên! (tức là không phải là đệ quy nguyên thủy) Điều này có nghĩa là Gôdel và tư thế của anh ta không thể nắm bắt được tất cả các chức năng tính toán trong quá trình xây dựng của họ!Ack

Gôdel đã phải mở rộng lớp chức năng của mình để có thể xây dựng . Ông đã làm điều này bằng cách định nghĩa như sau:Ack

Giảm thiểu không giới hạn

  • g:NkN
  • NẾU THEN g ( ¯ x k ) = y ELSE g ( ¯ x k ) không được định nghĩa.[f(xk¯,y)=0 AND f(xk¯,z) is defined z<y AND f(xk¯,z)0]

    g(xk¯)=y

    g(xk¯)

Cái cuối cùng này có thể khó nắm bắt, nhưng về cơ bản, điều đó có nghĩa là là gốc nhỏ nhất của f (nếu một gốc tồn tại).g((x1,x2,,xk))f


Tất cả các chức năng có thể được xây dựng với tất cả các công trình được xác định ở trên được gọi là đệ quy . Một lần nữa, tên đệ quy chỉ là theo định nghĩa và nó không nhất thiết phải có mối tương quan với các hàm tự gọi chúng. Thực sự, coi nó là một từ đồng âm.

Hàm đệ quy có thể là hàm đệ quy một phần hoặc tổng hàm đệ quy . Tất cả các hàm đệ quy một phần là các hàm đệ quy tổng. Tất cả các hàm đệ quy nguyên thủy là tổng số. Như một ví dụ về hàm đệ quy một phần không phải là toàn bộ, hãy xem xét việc tối thiểu hóa hàm kế. Hàm kế nhiệm không có gốc, do đó tối thiểu hóa của nó không được xác định. Một ví dụ về tổng hàm đệ quy (sử dụng tối thiểu hóa) là .Ack

Bây giờ, Gôdel đã có thể xây dựng hàm với lớp hàm mở rộng của mình. Thực tế, mọi chức năng có thể được tính toán bằng máy Turing, có thể được biểu diễn bằng cách sử dụng các cấu trúc ở trên và ngược lại, mọi cấu trúc có thể được biểu diễn bằng máy Turing.Ack

Nếu bạn tò mò, bạn có thể cố gắng làm cho lớp của Gôdel lớn hơn. Bạn có thể cố gắng xác định 'đối diện' của tối thiểu hóa không giới hạn. Đó là, tối đa hóa không giới hạn , tức là chức năng tìm ra gốc lớn nhất. Tuy nhiên, bạn có thể thấy rằng tính toán chức năng đó là khó (không thể). Bạn có thể đọc vào Bài toán bận rộn , cố gắng áp dụng tối đa hóa không giới hạn.


4
Tôi biết nhận ra các định nghĩa đã cho không thực sự trả lời câu hỏi, nhưng câu trả lời của tôi mô tả sự phát triển của lý thuyết đệ quy / tính toán, loại. Có thể đáng để đọc.
Auberon

Tôi thích nó, cảm ơn vì những nỗ lực của bạn :-)
Golo Roden

h((x1,x2,...,xk),0)= =f((x1,x2,...,xk))h((x1,x2,...,xk,0)). Ngoài ra, không có mệnh đề nào trước mệnh đề khác của dấu đầu dòng tiếp theo.
Tháp Eric

2
μ

1
Có khá nhiều câu không đúng trong câu trả lời của bạn. Bạn không nên tạo nên lịch sử cho một câu trả lời.
Kaveh

17

Những người sáng lập lý thuyết tính toán là các nhà toán học. Họ thành lập cái mà ngày nay gọi là lý thuyết tính toán trước khi có bất kỳ máy tính nào. Cách các nhà toán học định nghĩa các hàm có thể được tính toán là gì? Theo định nghĩa đệ quy!

Vì vậy, đã có chức năng đệ quy trước khi có bất kỳ mô hình tính toán nào khác như máy Turing hoặc máy tính lambda hoặc máy đăng ký. Vì vậy, mọi người gọi các hàm này là các hàm đệ quy. Việc họ hóa ra chính xác là những gì máy Turing và các mô hình khác có thể tính toán là một sự kiện sau này (chủ yếu được chứng minh bởi Kleene).

μ

Tên của lĩnh vực được sử dụng để lý thuyết đệ quy. Tuy nhiên, đã có một sự thúc đẩy thành công trong những thập kỷ gần đây để thay đổi tên thành một cái gì đó hấp dẫn hơn từ lý thuyết đệ quy sang một cái gì đó nghiêm túc hơn máy tính (so với toán học). Kết quả là lĩnh vực này được gọi là lý thuyết tính toán. Tuy nhiên nếu bạn nhìn vào sách, giấy tờ, hội nghị, v.v. trong những thập kỷ đầu, chúng được gọi là lý thuyết đệ quy và không phải là lý thuyết tính toán. Ngay cả tựa đề cuốn sách năm 1987 của Soare (người là người đứng sau nỗ lực thay đổi tên thành lý thuyết tính toán) là "Bộ và cấp độ đệ quy".

Nếu bạn muốn biết thêm về lịch sử, một nơi thú vị và tốt để đọc về nó là chương đầu tiên của Lý thuyết đệ quy cổ điển của Odifreddi.


7

Robert Soare đã viết một bài luận về vấn đề này. Theo ông, thuật ngữ (các hàm đệ quy chung) được đặt ra bởi Gôdel, người đã định nghĩa chúng bằng cách sử dụng một số loại đệ quy lẫn nhau. Tên bị kẹt, mặc dù sau đó trên các định nghĩa tương đương khác đã được tìm thấy.

Để biết thêm thông tin, tôi đề nghị bài luận của Soare.


0

thay vì đưa ra một bình luận dài quyết định thêm một câu trả lời:

Bởi vì chúng được định nghĩa đệ quy , tức là " các hàm phức tạp hơn được định nghĩa theo các hàm được định nghĩa trước đó, các hàm đơn giản hơn "

Loại thủ tục lặp hoặc tăng này tạo ra các hàm được xác định rõ (theo nghĩa toán học)

Đây là ý nghĩa của đệ quy trong cách nói toán học. Xem bên dưới làm thế nào điều này liên quan đến đệ quy trong cách nói lập trình.

So sánh thủ tục này với các kỹ thuật và phương pháp như cảm ứng (toán học) cũng là một ví dụ về đệ quy trong toán học.

Lập trình có một mạch toán học cũng như kỹ thuật.

Quy trình (thông thường mang tính xây dựng) này cũng được gọi là " bootstrapping " theo cách nói của Hệ điều hành.

Tuy nhiên, một đệ quy thời gian chạy của cùng một hàm (nghĩa là tự điều chỉnh trong thời gian chạy của nó ), vì nó phải (hmm, nên) xảy ra trên các giá trị đã được tính toán (hoặc đối số), hay nói cách khác, trong phần của tập kết quả đã được tính toán , cũng được đệ quy theo nghĩa trên, tức là " đã xác định các hàm được xác định trước đó (và các giá trị của chúng) "

Khác không được xác định rõ và dẫn đến những thứ như Stack Overflow :))))

Để đưa ra một ví dụ khác từ Hệ điều hành, một đệ quy thời gian chạy (gọi chính nó) có thể được coi là tương tự của việc khởi động lại hệ điều hành sau một bản cập nhật nhất định (ví dụ: cập nhật lõi). Nhiều hệ điều hành làm thủ tục sau:

  1. khởi động ban đầu để tải các thói quen cấp thấp (ví dụ: I / O)
  2. thực hiện các cập nhật cần thiết (sử dụng các thói quen cấp thấp)
  3. khởi động lại (hiệu quả, gọi lại chính nó), nhưng lần này tải các thói quen phức tạp hơn (hoặc thậm chí toàn bộ hệ thống)

Câu trả lời hay của Auberon cho thấy một quy trình thuộc loại này chi tiết hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.