阿克曼(Ackmann)函数

阿克曼(Ackmann)函数

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1163

【题目描述】

阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为:

akm(m,n) = n+1;         (m=0时)

akm(m,n) = akm(m-1,1);  (m>0,n=0时)

akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时)

【输入】

输入m和n。

【输出】

函数值。

【输入样例】

2 3

【输出样例】

9
#include <iostream>
#include<stdio.h>
using namespace std;

int akm(int m,int n){
    if(m==0) return n+1;
    if(m>0&&n==0)return akm(m-1,1);
    return akm(m-1,akm(m, n-1));
}
int main(){

    int m,n;
    cin>>m>>n;
    cout<<akm(m,n);

}
时间: 2024-10-10 20:15:39

阿克曼(Ackmann)函数的相关文章

金山云笔试题:AKM函数

1. 题目描述 /** 阿克曼(Ackmann)函数 [题目描述] 阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为: akm(m,n) = n+1;         (m=0时) akm(m,n) = akm(m-1,1);  (m>0,n=0时) akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时) [输入]输入m和n. [输出]函数值. [输入样例]2 3 [输出样例]9 */ 写出递归与非

并查集模板、

并查集是一种用来管理元素分组情况的数据结构. 并查集的复杂度:并查集加入两个优化(路径压缩和高度的合并)以后效率很高,对n个元素的并查集进行一次操作的复杂度是O(a(n)).在这里,a(n)是阿克曼(Ackermann)函数的反函数,这比O(log(n))还快,不过这是“均摊复杂度”,也就是说不是每一次操作都满足这个复杂度,而是多次操作以后平均每一次的操作的复杂度是O(a(n)) 1 int par[MAX_N]; //父亲 2 int rank[MAX_N]; //树的高度 3 4 //初始化

加工并存储数据的数据结构

堆 一些注意点:左儿子的编号是自己的编号*2+1右儿子的编号是自己的编号*2+2父亲节点的编号是(自己的编号-1)/2 手动实现的堆,贴一段书上的代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int const MAX_N=233333; 6 int heap[MAX_N]; 7 int sz,n; 8 9 void push(int); 10 int pop(void); 11 12 int main() 13 { 14 cin

并查集(Union Find):实现及其优化(c++)

1.什么是并查集 并查集是用来管理元素分组的数据结构.可以高效进行如下操作: 查询元素a.b十是否在同一组 合并a.b所在的组 并查集可以进行合并操作但不能进行分割操作. 2.并查集的结构 并查集采用多叉树形结构实现,每个元素对应一个结点,每个组对应一棵树.重点关注结整体形成一个树形结构,而不是树的形状等信息. 3.并查集的实现 3.1 初始化 对于并查集,一般采用数组来实现,其中元素为数组的索引,其父辈为数组索引对应内容. 在初始化中,将每个元素父辈设为自己,即自己形成一组,并对用一个rank

14、蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数

14.蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数 本篇名言:"今天就是生命 ----- 是唯一你能确知的生命." 继续递归应用,阿克曼函数. 欢迎转载,转载请标明出处: 1.  阿克曼函数 阿克曼函数(Ackermann)是非原始递归函数的例子.它需要两个自然数作为输入值,输出一个自然数.它的输出值增长速度非常高,仅是对于(4,3)的输出已大得不能准确计算. Ackermann函数定义如下: 若m=0,返回n+1. 若m>0且n=0,返回Ackermann(m-1,1

每天刷个算法题20160524:阿克曼函数的递归转非递归解法

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51524754 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在发点代码. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofei-it/Algorithms 绝大部分算法都是我自己写的,没有参考网上通用代码.读者可能会觉得有的代码晦涩难懂,因为那是我自己的理解. 最近几天都是在写一些原来的东西

C语言之函数调用12—递归法求阿克曼函数

//递归法! /* =========================================== 题目:编写阿克曼函数的递归函数程序! A(m,n)= n+1                (m=0) A(m-1,1)       (m=0) A(m-1,A(m,n-1))            (m!=0,n!=0) =========================================== */ #include<stdio.h> int A(int m,int n)

Ackerman 函数

先留个简介: 函数定义: 从定义可以看出是一个递归函数.阿克曼函数不仅值增长的非常快,而且递归深度很高. 一般用来测试编译其优化递归调用的能力.. 如果用一下代码简单实现的话,输入参数4,2程序就直接奔溃了,(复杂度太大) #include <stdio.h> int ackerman (int m, int n) { int i, tmp; if (m == 0) return n+1; if (n == 0 && m > 0) return ackerman (--m

js高阶函数

map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个