我找到了 Ackermann 函数的这个版本,并尝试在 MIT Scheme Lisp 中对其进行编码,但没有成功:
阿克曼函数 A(m,n)
当 m=0 时
A(m,n)=n+1
当 m>0 且 n=0 时
A(m,n)=A(m-1,1)
当 m>0 且 n>0 时
A(m,n)=A(m-1,A(m,n-1))
(在这里找到http://www.gfredericks.com/sandbox/arith/ackermann)
我的方案代码:
(define (acker2 m n)
(cond ((= m 0)
(+ n 1))
((and (> m 0)
(= n 0))
(acker2 (- m 1)
1))
((and (> m 0)
(> n 0))
(acker2 (- m 1)
(acker2 (m
(- n 1)))))))
现在一些结果:
(acker2 0 0) 值:1
(acker2 0 1) 值:2
(acker2 0 2) 值:3
(acker2 2 2) 对象 2 不适用
(acker2 1 23) 对象 1 不适用
(acker2 8 0) 对象 7 不适用
解决方案是什么?