Ackermann函数的非递归求值
作者:互联网
Ackermann函数的非递归求值
描述
Ackermann函数定义见题解,题目要求使用递归实现这个函数。
输入
多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。
输出
每组数据输出一行,为Ack(m,n)。
输入样例 1
2 1
0 0
输出样例 1
5
AC 代码
/*bjfu什么破网,根本加载不出Ackermann函数的定义
Ackermann函数定义:
若m=0,返回n+1。
若m>0且n=0,返回Ackermann(m-1,1)。
若m>0且n>0,返回Ackermann(m-1,Ackermann(m,n-1))
纯纯的递归形式,虽然它的介绍上是阿克曼函数(Ackermann)是非原始递归函数的例子
因此这题需要你使用非递归的方式来实现Ackermann函数
警告:一旦 m > 3,连 long long 也hold不住
*/
/*基本思路:
我们使用栈的特性来实现(bushi),栈的水太深了,还是用二维数组吧
其实数组水也深
基本思路就是用二维数组模拟树,第一维代表层数(也不知道理解得对不对)
*/
#include <iostream>
#define MAX 100
using namespace std;
int Ackermann(int m, int n)
{
int tmp[m + 1][MAX];
for (int j = 0; j < MAX; j ++)
tmp[0][j] = j + 1;
for (int i = 1; i <= m; i ++)
{
tmp[i][0] = tmp[i - 1][1];
for (int j = 1; j < MAX; j ++)
tmp[i][j] = tmp[i - 1][tmp[i][j - 1]];
}
return (tmp[m][n]);
}
int main()
{
int m, n;
while (cin >> m >> n, m && n)
cout << Ackermann(m, n) << endl;
return 0;
}
标签:tmp,Ackermann,函数,递归,int,MAX,求值 来源: https://blog.csdn.net/weixin_57095511/article/details/121311804