当前位置: 代码迷 >> C语言 >> 为什么?
  详细解决方案

为什么?

热度:261   发布时间:2005-12-28 17:37:00.0
为什么?
大家看看这个程序:
#include <iostream.h>
long int Ack(int m,int n);
void main(void)
{
int a,b;
cout<<"请输入阿克曼函数中的参数a:";
cin>>a;
cout<<"请输入阿克曼函数中的参数b:";
cin>>b;
cout<<"Ack("<<a<<","<<b<<")="<<Ack(a,b)<<endl;
}
long int Ack(int m,int n)
{long int ack;
if(m==0) ack=n+1;
if(1<=m&&n==0) ack=Ack(m-1,1);
if(m>=1&&n>=1) ack=Ack(m-1,Ack(m,n-1));
return ack;
}
为什么输入4,1后没有结果?
是不是数据过大的原因?
但是输入3 ,5就有结果如下:
******************************************
请输入阿克曼函数中的参数a:3
请输入阿克曼函数中的参数b:5
Ack(3,5)=253
Press any key to continue
******************************************
----------------解决方案--------------------------------------------------------
反正我也试了好多数字 比如输入5,0也没法显示
跟踪其值的变化 算了好久都没算出最后结果
if(m==0) ack=n+1;
if(1<=m&&n==0) ack=Ack(m-1,1);
if(m>=1&&n>=1) ack=Ack(m-1,Ack(m,n-1));
这儿的循环太多了!
----------------解决方案--------------------------------------------------------
谁能帮我看看这个是怎么回事?

----------------解决方案--------------------------------------------------------

老兄,你好好想想你的递归调用吧
凡是输入的a>b,结果都有一个ack=Ack(k,0),出现0就不对了嘛


----------------解决方案--------------------------------------------------------

不能调用Ack(4,*)(及4以上),因为这时Ack() 函数增长太快,系统栈将被耗尽!


----------------解决方案--------------------------------------------------------

呵呵,谢谢了!我明白了!


----------------解决方案--------------------------------------------------------
是程序错了,无限递归...
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
呵呵

----------------解决方案--------------------------------------------------------
不可能吧?
你能说说错在哪里了?不应该是无限递归啊!
递归次数是多了些但是不应该是无限递归。
----------------解决方案--------------------------------------------------------
  相关解决方案