【问题描述】
阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为:
akm(m,n) = n+1; (m=0时)
akm(m,n) = akm(m-1,1); (m>0,n=0时)
akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时)
【输入格式】:
输入m和n。
【输出格式】:
函数值
【输入样例】:
2 3
【输出样例】:
9
【参考程序】
#include <cstdio>
#include <iostream>
using namespace std;
int akm(int m, int n) {
if (m == 0) { // 判断是否达到递归边界:m=0
return n+1;
} else if (n == 0) { // 判断是否达到递归边界:n=0
return akm(m-1,1);
} else {
return akm(m-1, akm(m,n-1));
}
}
int main() {
int m, n;
cin >> m >> n;
int r = akm(m, n); // r储存ack(m,n)的值
cout << r << endl;
return 0;
}