题目: 2656 阿克曼函数 1.0 秒 131,072.0 KB 5 分 1级题 阿克曼(Arkmann)函数 𝐴(𝑚,𝑛) 中,m与n的定义域是非负整数且本题中m<=3,n<=30。
函数的定义为: 𝑎𝑘𝑚(𝑚,𝑛)=⎧⎩⎨⎪⎪𝑛+1𝑎𝑘𝑚(𝑚−1,1)𝑎𝑘𝑚(𝑚−1,𝑎𝑘𝑚(𝑚,𝑛−1))(𝑚=0)(𝑚>0,𝑛=0)(𝑚>0,𝑛>0)
输入 两个整数 m n 输出 一个整数,akm(m,n)的结果 输入样例 1 1 输出样例 3 解法:递归记忆化即可,注意数组范围,数组的大小 代码:
using namespace std;
int a[13][1000000];
int f(int m,int n)
{
if(a[m][n] != 0){
return a[m][n];
}
if(m == 0)
return a[m][n] = n + 1;
else if(n == 0)
return a[m][n] = f(m - 1, 1);
else if(m > 0 && n > 0)
return a[m][n] = f(m - 1,f(m,n - 1));
}
int main()
{
int n,m;
scanf("%d%d",&n, &m);
printf("%d",f(n,m));
}