ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ackermann函数的非递归求值

2021-11-13 22:59:17  阅读:149  来源: 互联网

标签:tmp Ackermann 函数 递归 int MAX 求值


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有