Ackerman函数的栈实现
2024-10-18 21:25:09
一、Ackerman函数:
ackerman函数的定义如下:
二、Ackerman函数的递归实现:
利用递归来实现ackerman函数是比较简单的:
/*Sample Input:
0 1
1 1 Sample Output:
2
3
*/ #include<bits/stdc++.h>
using namespace std; int akm(int m, int n){
if(m == )return n+;
if(m != && n == )return akm(m-, );
if(m != && n != )return akm(m-, akm(m, n-));
} int main(){
int m, n;
while(cin >> m >> n){
cout << akm(m ,n) << endl;
}
}
三、利用栈来实现Ackerman函数:
我们可以使用栈来模拟递归函数的过程,下列代码中,使用栈st来保存每个递归函数的参数m,tmp用来保存每个递归函数的返回值:
/*Sample Input:
0 1
1 1 Sample Output:
2
3
*/ #include<bits/stdc++.h>
using namespace std; int akm(int m, int n){
stack<int>st;
int tmp;
while(true){
while(m > ){
if(n == ){
m--;
n = ;
}
else{
st.push(m - );
n--;
}
}
tmp = n + ;
if(st.empty())break;
else{
m = st.top();
n = tmp;
}
st.pop();
} return tmp;
} int main(){
int m, n;
while(cin >> m >> n){
cout << akm(m ,n) << endl;
}
}
//End
最新文章
- 谈谈favicon和他带来的问题
- xcode 打静态库.a文件
- Cacti客户端SNMP的安装和配置
- UWP开发入门(十四)—— UserControl中Adaptive UI的小技巧
- aliyun install php apache mysql nginx
- (原创)如何在spannableString中使用自定义字体
- js 判断url的?后参数是否包含某个字符串
- CRM Entity 之Money转string int类型等
- 原来你是个这样的JVM
- typings 命令使用注意
- SQL 查询中case的运用
- JavaScript 系列博客(一)
- 2017.11.7 ant design - upload 组件的使用, react 条件渲染以及 axios.all() 的使用
- IIS ";rewrite.dll failed to load. The data is the error."; 错误解决方法
- encode decode enumerate
- iphone之使用讯飞语音sdk实现语音识别功能
- CentOS使用EPEL YUM源
- rm删除某个文件之外的文件
- Vue学习—组件的学习
- php 实现重定向的三种方式
热门文章
- winform窗体控件(全)
- spring mvc+ spring +mybatis
- iOS Photos.framework框架
- Centos6安装Gitlab
- YII2如何修改默认控制器/方法
- 解决Firefox/Opera 不支持onselectstart事件实现不允许用户select
- ARM Cortex-M0权威指南高清中文版pdf免费分享下载
- Caliburn.Micro学习笔记(五)----协同IResult
- 【翻译】DotNetMQ: 一个.NET版完整的消息队列系统
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)