仔细阅读以下一段递归的函数定义: int ack(int m,int n) { if(m==0) { return n+1; } else if(n==0) { return ack(m-1,1); } else { return ack(m-1,ack(m,n-1)); } } 请问ack(3,3)的返回值是 1 。
ack(0,n) = n+1,ack(0,1)=2,ack(1,0)=ack(0,1)=2
ack(1,n) = ack(0,ack(1,n-1))=ack(1,n-1)+1
An = An-1 + 1 推出递推公式为An=n+1,即ack(1,n)=n+2
ack(2,n) = ack(1,ack(2,n-1))=ack(2,n-1)+2
ack(2,0) = ack(1,1)=3
类似的:ack(2,n)= 2n+3
ack(3,n) = ack(2,ack(3,n-1))= 2ack(3,n-1)+3
ack(3,n) + 3 = 2(ack(3,n-1) + 3)
ack(3,0) = 5
等比公式:ack(3,n)=2^(3(n-1))-3
故:ack(3,3)=61
http://blog.csdn.net/gpengtao/article/details/7438587
这里的ack(1,n)求错了