Ackerman函数A(n,m)有两个独立变量m>=0和n>=0,定义如下:
A (1,0)=2
A (0,m)=1 m>=0
A (n,0)=n+2 n>=2
A (n,m)=A(A(n-1,m),m-1) n,m>=1
我的程序:public class Ackerman {
private int first;
private int last;
public Ackerman(int first,int last)
{
this.first = first;
this.last = last;
}
private int Ack(int first,int last)
{
if(first == 1 && last == 0)
{
return 2;
}
else if(first == 0 && last >= 0)
{
return 1;
}
else if(first >= 2 && last == 0)
{
return first+2;
}
else if(first >= 1 && last >= 1 )
{
return Ack(Ack(first-1,last),last-1);
}
else return 0;
}
private void Print()
{
System.out.println("Ackerman["+first+","+last+"]"+"="+Ack(first,last));
}
public static void main(String[] args)
{
Ackerman Ack = new Ackerman(3,3);
Ack.Print();
}
}当要求解的是A[3,3]和小于(3,3)组合时没错误,当要求解是A[4,4]或者以上的时候就显示有错误了,请指教~~~~
A (1,0)=2
A (0,m)=1 m>=0
A (n,0)=n+2 n>=2
A (n,m)=A(A(n-1,m),m-1) n,m>=1
我的程序:public class Ackerman {
private int first;
private int last;
public Ackerman(int first,int last)
{
this.first = first;
this.last = last;
}
private int Ack(int first,int last)
{
if(first == 1 && last == 0)
{
return 2;
}
else if(first == 0 && last >= 0)
{
return 1;
}
else if(first >= 2 && last == 0)
{
return first+2;
}
else if(first >= 1 && last >= 1 )
{
return Ack(Ack(first-1,last),last-1);
}
else return 0;
}
private void Print()
{
System.out.println("Ackerman["+first+","+last+"]"+"="+Ack(first,last));
}
public static void main(String[] args)
{
Ackerman Ack = new Ackerman(3,3);
Ack.Print();
}
}当要求解的是A[3,3]和小于(3,3)组合时没错误,当要求解是A[4,4]或者以上的时候就显示有错误了,请指教~~~~
else if(first >= 1 && last >= 1 )
{
System.out.println(first+";"+last);
return Ack(Ack(first-1,last),last-1);
}
自己调看一下就知道了,程序有问题,递归没有终止的条件
Ack(Ack(first-1,last),last-1);
你递归的层数太多了。