阿克曼函数定义如下:
#include<iostream>
#include<vector>
using namespace std;
int A(int m, int n) {
cout << m << ',' << n << endl;
if (m == 0)
return n + 1;
else if (m > 0 && n == 0)
return A(m - 1, 1);
else
return A(m - 1, A(m, n - 1));
}
int main() {
int m = 4, n = 1;
//cout<<A(m, n); //爆栈
vector<int> val(m + 1, -1), index(m + 1, -1);
index[0] = 0; val[0] = 1;
while (index[m] < n) {
val[0]++;
index[0]++;
for (int j = 1; j <= m; j++) {
if (index[j - 1] == 1) {
val[j] = val[j - 1];
index[j] = 0;
}
if (val[j] != index[j - 1])
break;
index[j]++;
val[j] = val[j - 1];
}
}
return val[m];
return 0;
}