Implement the Ackermann function, which is defined as
$A(m,n)={\begin{cases}n+1&{\mbox{if }}m=0\\A(m-1,1)&{\mbox{if }}m>0{\mbox{ and }}n=0\\A(m-1,A(m,n-1))&{\mbox{if }}m>0{\mbox{ and }}n>0\end{cases}}$.
Your function declaration should be
unsigned long ackermann( unsigned long m, unsigned long n );
The one difficulty is if $n + 1$ overflows, so if this occurs, you should throw a std::range_error exception.
Try the following program:
#include <iostream>
#include <stdexcept>
unsigned long ackermann( unsigned long m, unsigned long n );
int main();
int main() {
for ( unsigned long m{0}; m <= 4; ++m ) {
for ( unsigned long n{0}; n <= 4; ++n ) {
std::cout << "A( " << m << ", " << n << " ) = "
<< A(m, n) << std::endl;
}
std::cout << std::endl;
}
return 0;
}