Ackermann函数的递归求值

多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。Ackermann函数的递归求值

描述

Ackermann函数定义见题解,题目要求使用递归实现这个函数。

输入

多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。

输出

每组数据输出一行,为Ack(m,n)。

输入样例 1
3 5
3 10
0 0
输出样例 1
253
8189
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)是非原始递归函数的例子

警告:一旦 m > 3,连 long long 也hold不住
*/
#include 

using namespace std;

typedef long long LL;

LL Ackermann(LL m, LL n)
{
    if (!m)
        return n + 1;
    else if (m > 0 && !n)
        return Ackermann(m - 1, 1);
    else if (m > 0 && n > 0)
        return Ackermann(m - 1, Ackermann(m, n - 1));
}

int main()
{
    LL m, n;
    while (cin >> m >> n, m && n)
        cout << Ackermann(m, n) << endl;
    
    return 0;
}

你可能感兴趣的:(BJFU数据结构,算法,贪心算法,动态规划)