Hàm Ackermann đáng chú ý là một trong những ví dụ đơn giản nhất về hàm tổng, tính toán không phải là đệ quy nguyên thủy.
Chúng tôi sẽ sử dụng định nghĩa A(m,n)
lấy hai số nguyên không âm trong đó
A(0,n) = n+1
A(m,0) = A(m-1,1)
A(m,n) = A(m-1,A(m,n-1))
Bạn có thể thực hiện
- một hàm được đặt tên hoặc ẩn danh lấy hai số nguyên làm đầu vào, trả về một số nguyên hoặc
- một chương trình lấy hai số nguyên được phân tách bằng dấu cách hoặc dòng mới trên STDIN, in kết quả thành STDOUT.
Bạn không được sử dụng chức năng Ackermann hoặc chức năng hạ âm từ thư viện, nếu có, nhưng bạn có thể sử dụng bất kỳ chức năng nào khác từ bất kỳ thư viện nào khác. Cấp số nhân thường xuyên được cho phép.
Hàm của bạn phải có thể tìm giá trị của A(m,n)
m ≤ 3 và n ≤ 10 trong chưa đầy một phút. Nó ít nhất phải chấm dứt về mặt lý thuyết trên bất kỳ đầu vào nào khác: không gian ngăn xếp vô hạn, loại Bigint nguyên gốc và một khoảng thời gian dài tùy ý, nó sẽ trả về câu trả lời. Chỉnh sửa: Nếu ngôn ngữ của bạn có độ sâu đệ quy mặc định quá hạn chế, bạn có thể cấu hình lại mà không mất chi phí ký tự.
Bài nộp với số lượng nhân vật ngắn nhất sẽ thắng.
Dưới đây là một số giá trị, để kiểm tra câu trả lời của bạn:
A | n=0 1 2 3 4 5 6 7 8 9 10
-----+-----------------------------------------------------------------
m=0 | 1 2 3 4 5 6 7 8 9 10 11
1 | 2 3 4 5 6 7 8 9 10 11 12
2 | 3 5 7 9 11 13 15 17 19 21 23
3 | 5 13 29 61 125 253 509 1021 2045 4093 8189
4 | 13 65533 big really big...
A(3,8)
và ở trên một cách ngây thơ như những người khác đã làm? Tôi có phải đưa ra giải pháp không đệ quy không, hoặc tôi cũng có thể chỉ "giả định không gian ngăn xếp vô hạn" trong những trường hợp này? Tôi khá chắc chắn, nó sẽ chấm dứt trong vòng một phút.