Tôi đang nghiên cứu bằng chứng về chức năng Ackermann được đệ quy, nhưng không phải đệ quy nguyên thủy, và một câu hỏi đặt ra cho tôi: "Vậy thì sao?". Tại sao nó quan trọng? Tầm quan trọng của các hàm đệ quy nguyên thủy là gì?
Tôi đang nghiên cứu bằng chứng về chức năng Ackermann được đệ quy, nhưng không phải đệ quy nguyên thủy, và một câu hỏi đặt ra cho tôi: "Vậy thì sao?". Tại sao nó quan trọng? Tầm quan trọng của các hàm đệ quy nguyên thủy là gì?
Câu trả lời:
Vấn đề tạm dừng là không thể giải quyết được, nhưng người ta có thể phản đối rằng đối với hầu hết các chương trình, thật dễ dàng để kiểm tra xem chúng có dừng lại hay không, bằng cách tìm kiếm bất kỳ vòng lặp vô hạn rõ ràng nào. Ngược lại, nếu bạn muốn đảm bảo rằng chương trình của bạn luôn kết thúc, bạn có thể làm như vậy bằng cách giới hạn số lần lặp lại cho mỗi vòng lặp. Ví dụ, hãy xem xét mã giả cho bình phương lặp lại:
def power(x, y, p):
"compute x^y mod p"
assert y >= 0
result = 1
while y > 0:
if x is odd: result = result * x (mod p)
y = y div 2
x = x * x
return result
Làm thế nào để chúng ta biết rằng thủ tục này luôn luôn chấm dứt? Một cách sẽ là một tiên nghiệm ràng buộc vòng lặp:
def power(x, y, p):
"compute x^y mod p"
assert y >= 0
bound = y
result = 1
loop bound times:
if x is odd: result = result * x (mod p)
y = y div 2
x = x * x
if y == 0: break
return result
Bây giờ rõ ràng chương trình này chấm dứt và nếu chúng tôi không mắc lỗi ở nơi khác, hai chương trình sẽ tạo ra cùng một đầu ra.
Các hàm đệ quy nguyên thủy là các hàm được tính toán bởi các chương trình trong đó tất cả các vòng lặp được giới hạn và không có đệ quy.
Mặc dù chúng tôi không cho phép đệ quy (vì nó không bị ràng buộc), chúng tôi có thể mô phỏng nó bằng một vòng lặp. Chúng tôi có thể hỏi một số câu hỏi bây giờ:
Để trả lời 1, người ta có thể chỉ ra rằng các hàm tính toán nhất định phát triển "quá nhanh" không phải là đệ quy nguyên thủy, ví dụ như hàm Ackermann. Ngược lại, mọi chức năng có tốc độ tăng trưởng là "hợp lý" là đệ quy nguyên thủy. Và mọi hàm tính toán có thể được nêu ở dạng cho đệ quy nguyên thủy , trong đó chúng ta nghĩ về như một vị ngữ.
bound
phải được tính toán bằng các hàm đệ quy nguyên thủy. 2) Giải thích thuật ngữ "đệ quy nguyên thủy" bằng cách nói "không sử dụng đệ quy" là số lẻ. Chúng tôi có thể sử dụng đệ quy, không phải bất kỳ loại nào.
Khi tôi tham gia khóa học tính toán của mình, chúng tôi đã được giới thiệu về điều này theo cách sau:
Đệ quy nguyên thủy là một cách tự nhiên để xác định một tính toán (có thể rõ ràng nếu bạn có đầu óc toán học, đối với một lập trình viên thì dễ hiểu hơn rằng đệ quy là một vòng lặp ngược).
Vì vậy, một khi bạn thành thạo đệ quy nguyên thủy, bạn tự hỏi: đó có phải là tất cả trong tính toán không?
Chà, hóa ra là không phải. Đầu tiên, bạn đang thiếu các giá trị không xác định. Ok, vì vậy bạn có thể mở rộng đệ quy nguyên thủy đến các hàm đệ quy nguyên thủy một phần.
Tuy nhiên, có một số chức năng tính toán (hoàn chỉnh) không phải là đệ quy nguyên thủy. Vâng, Ackermann là một trong số đó. Vì vậy, đó là lý do tại sao chức năng Ackermann là quan trọng. Nó chỉ ra rằng 'đệ quy' là "đệ quy nguyên thủy + tối thiểu hóa", và trong khi nó không thể được chứng minh, có vẻ như, đó là tất cả để tính toán.
Vì vậy, các hàm đệ quy nguyên thủy rất quan trọng vì chúng là
Không chắc chắn - có thể người khác sẽ biết - nhưng tôi nghĩ trước khi Ackermann đưa ra chức năng của mình, các nhà toán học đã nghĩ rằng computable = đệ quy nguyên thủy + hàm một phần.