经典指数          
原因
3226
浏览数
0
收藏数
 

仔细阅读以下一段递归的函数定义: 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 。

     举报   纠错  
 
切换
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)求错了

 
切换
撰写答案