源于SICP中一道习题。
下面过程计算一个成为Ackermann函数的数学函数:
(define (A x y)
(cond ((= y 0) 0)
((= x 1) (* 2 y))
((= y 1) 2)
(else (A (- x 1)
(A x (- y 1))))))
下面各表达式的值是什么:
(A 1 10)
(A 2 4)
(A 3 3)
等价的数学函数表达式为:
f ( x , y ) = { 0 , y = 0 2 y , x = 0 2 , y = 1 f ( x − 1 , f ( x , y − 1 ) ) ) , e l s e f(x,y)=\left\{\begin{matrix} 0 & ,y=0\\ 2y& ,x=0\\ 2 & ,y=1 \\ f(x-1,f(x, y-1)))& ,else \end{matrix}\right. f(x,y)=⎩⎪⎪⎨⎪⎪⎧02y2f(x−1,f(x,y−1))),y=0,x=0,y=1,else
首先,这个函数是用递归定义的。它包含边界值和递归式。
边界值:
(1) f ( x , 0 ) = 0 f(x,0)=0 f(x,0)=0
(2) f ( x , 1 ) = 2 f(x,1)=2