这个C语言程序的结果怎么算?答案是61
int acker(int m,int n)
{
if(m==0)
return n+1;
else if(n==0)
return acker(m-1,1);
else
return acker(m-1,acker(m,n-1));
}
int main()
{
printf("%d\n",acker(3,3));
return 0;
} 展开
int acker(3,3): return acker(2, acker(3, 2))
先执行 acker(3,2): return acker(2, acker(3,1))
先执行 acker(3,1): return ackert(2, acker(3,0))
先执行acker(3,0) : 由于n=0,所以return acker(2,1)
计算acker(2,1) : return acker(1, acker(2, 0))
先计算acker(2,0): return acker(1,1)
计算acker(1,1) : return acker(0, acker(1, 0))
先计算acker(1,0): return acker(0, 1)
acker(0, 1) 结果是return n+1 即,return 2;
返回到第8步,继续返回2
返回到第7步, acker(1,0)=2,继续计算 return acker(0, 2)
acker(0, 2) 结果return n+1, 即return 3;
返回到第6步,继续返回3到第5步 acker(2,0)=3,继续计算 return acker(1, 3);
........
按照上述步骤一直计算下去,直到所有的计算都完毕。