文章目录

  • 一、什么是Ackerman函数(阿克曼函数)
  • 二、递归算法实现
    • 1. 设计递归方程
    • 2. 确定边界条件
    • 3. 编写程序代码
    • 4. 运行结果展示

一、什么是Ackerman函数(阿克曼函数)

定义:

A(m,n)={n+1若m=0A(m−1,1)若m>0且n=0A(m−1,A(m,n−1))若m>0且n>0A(m,n)=\begin{cases} n+1 & 若m=0\\ A(m-1,1) & 若m>0且n=0 \\ A(m-1,A(m,n-1)) & 若m>0且n>0 \end{cases} A(m,n)=⎩⎪⎨⎪⎧​n+1A(m−1,1)A(m−1,A(m,n−1))​若m=0若m>0且n=0若m>0且n>0​

或:

{A(1,0)=2m=0,n=1A(2,m)=1m≥0,n=0A(n,0)=n+2m=0,n≥2A(n,m)=A(A(n−1,m),m−1)m≥1,n≥1\begin{cases} A(1,0)=2 & m=0,n=1\\ A(2,m)=1 & m≥0,n=0 \\ A(n,0)=n+2 & m=0,n≥2\\ A(n,m)=A(A(n-1,m),m-1) & m≥1,n≥1 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​A(1,0)=2A(2,m)=1A(n,0)=n+2A(n,m)=A(A(n−1,m),m−1)​m=0,n=1m≥0,n=0m=0,n≥2m≥1,n≥1​

二、递归算法实现

1. 设计递归方程

当存在两个自变量时,应当先确定一个,然后再去研究关于另一个自变量的函数变化。

  • 当m=0m=0m=0时

    • A(m,n)=n+1A(m,n)=n+1A(m,n)=n+1
  • 当m>0m>0m>0时
    • 若n=0n=0n=0,则A(m,n)=A(m−1,1)A(m,n)=A(m−1,1)A(m,n)=A(m−1,1)
    • 若n>0n>0n>0,则A(m,n)=A(m−1,A(m,n−1))A(m,n)=A(m−1,A(m,n−1))A(m,n)=A(m−1,A(m,n−1))

2. 确定边界条件

此例为双重递归;其自变量为m,nm,nm,n,当m<0且n<0m<0且n<0m<0且n<0时跳出函数

3. 编写程序代码

// Ackermann函数(阿克曼函数)的递归实现算法
#include <iostream>using namespace std;int ackermann(int m, int n);int main()
{int m, n = 0;cout << "请输入第一个数m(自然数):";cin >> m;cout << "请输入第二个数n(自然数):";cin >> n;cout << "A(m, n) = " << ackermann(m, n) << endl;return 0;
}int ackermann(int m, int n)
{if (m == 0)return n + 1;else if (m > 0 && n == 0)return ackermann(m - 1, 1);else // else if (m > 0 && n > 0)return ackermann(m - 1, ackermann(m, n - 1));
}

4. 运行结果展示


*其它一些常见算法请参阅此链接~


最后,非常欢迎大家来讨论指正哦!

Ackerman函数(阿克曼函数) 递归实现(C++)相关推荐

  1. 栈的应用4——递归函数的非递归形式(主讲阿克曼函数的非递归形式)

    递归 函数自己调用自己 如求阶乘函数: int jiecheng(int n) {if(n==0)return 1;if(n==1)return 1;else return n*jiecheng(n- ...

  2. 语言阿克曼函数_函数式的动态规划

    函数式的动态规划 动态规划是一类很常用的算法,在C/C++/Java中一般使用于数组进行记忆化.而函数式编程语言一般无法方便地操作数组这些依赖副作用的数据结构,函数式的记忆化便要另寻他法. 本文就是一 ...

  3. ACM Ackermann function(阿克曼函数)

    这个问题真没想到,没留意M最大只有3,也完全没有想到用公式啥的,当时没往这方面想,直接按递归公式写的算法,结果狠狠的巴掌:超时了.... 问题描述 众所周知,阿克曼函数中扮演一个重要的角色在理论计算机 ...

  4. 算法:阿克曼函数(C++)

    算法原理 阿克曼函数定义: { n+1; m=0,n>0 A(m,n) = { A(m-1,1); n=0,m>0 { A(m-1,A(m,n-1)) n>0,m>0 #inc ...

  5. 【C/C++】阿克曼函数以及其数学的有限边界思维

    ## 在递归函数论和涉及集合的并的某些算法的复杂性研究中,有一个起重要作用的递归函数--阿克曼(Ackermann)函数,该函数是由希尔伯特的学生,德国著名数学家威尔海姆·阿克曼于1928年发现的.这 ...

  6. python函数闭包和递归_python函数基础3--闭包 + 递归 + 函数回调

    一.闭包 1. 函数嵌套 defouter():print("外层函数")definner():print("内层函数")returninner() outer ...

  7. python之路--嵌套函数、匿名函数、高阶函数。函数的递归

    嵌套函数 函数里不仅可以写代码,还可以嵌套函数 name = "小猿圈"def change():name = "小猿圈,自学编程"def change2(): ...

  8. JS函数表达式——函数递归、闭包

    一:定义函数的方式: 1.函数声明:2.函数表达式 函数声明的重要特征:函数声明提升,在执行代码之前会先读取函数声明. sayHi(); function sayHi(){console.log(&q ...

  9. 【C语言函数】 - 库函数、自定义函数、函数参数、函数调用、嵌套调用链式访问、递归与迭代、缓冲区

    目录 一.函数是什么 二.C语言中函数的分类 1.如何学会使用库函数 1.1.strcpy 1.2.memset 2.自定义函数 2.1.与库函数的区别 2.2.写一个函数可以找出两个整数的最大值 2 ...

  10. 利用VB函数Dir()实现递归搜索目录

     它没有采用任何的控件形式,也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实上,直接采用Dir()函数是不能进行自身的 ...

最新文章

  1. 跳过IE7beta2版的XP正版检测!
  2. 多目标优化算法(二)MOEAD及MOEAD与NSGA-Ⅱ的对比
  3. ajax如何提交多表单的值_25 HTML5表单基本控件(二)
  4. Python_内置模块2
  5. SPOJ9534 JZPLIT - Turn on the lights(高斯消元)
  6. iOS 动画之Spring动画、Block动画、GIF图
  7. 在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?
  8. 低版本浏览器不支持HTML5标签怎么解决?
  9. com.alibaba.druid.sql.parser.ParserException: syntax error, QUES %,
  10. 打开360浏览器显示无法连接服务器错误,最近360浏览器老是无法打开网页,提示错误如图,但是只要刷新就可以打开了,这是怎么回事?...
  11. 华为云怎么修改服务器密码,云服务器登陆密码如何修改
  12. 搜狐新闻文本分类数据集
  13. 消除无法用内置管理账户打开sticky notes
  14. MTK DDR进行ETT之后的压力---测试环境的搭建
  15. 石溪大学计算机科学咋么样,弗吉尼亚理工和石溪大学的计算机科学专业哪个好?为啥?...
  16. js开根号_原生js数值开根算法
  17. 一寸光阴一寸金——《波波侃项目之时间管理》
  18. Bootstrap 徽章
  19. linux迁移系统失败,Windows到Linux系统代码移植遇到的问题
  20. Hystrix之四种触发fallback情况

热门文章

  1. CE教程第八关——搜索4级指针
  2. 三分钟将PR电影级调色滤镜应用到Unity中__Unity_PPS使用笔记
  3. 【转载】斐讯K2P B1刷入金梅林固件,加koolproxy、S-S R等【V1.0尝鲜版】
  4. 如何优化深度学习模型
  5. 【vn.py学习笔记(七)】vn.py rqdata封装、datasbase等数据服务源码阅读
  6. IDEA 谷歌翻译报错 TKK
  7. python停用词_python利用jieba分词进行分词,去停止词(停用词)。
  8. 椭球体上某区域面积的求算,及该区域兰伯特投影与墨卡托投影到二维平面后面积对比...
  9. [RK3288][Android6.0] USB UVC 协议简结
  10. linux系统导航怎么刷安卓系统升级,4s送的10.2寸安卓导航刷机教程1