Functia Ackermann recursiv

#include<iostream.h>
long ack(unsigned x,unsigned y)
{
if(x==0) return y+1;
if(y==0) return ack(x-1,1);
return ack(x-1,ack(x,y-1));
}

void main()
{
unsigned m,n;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
cout<<ack(m,n);
}