栈和队列实现Ackermann函数
一.前言
上一篇随笔提过Ackermann函数了,因此我直接给出栈和队列实现Ackermann函数的代码以及注释
#include "bits/stdc++.h" using namespace std; int ack(int m,int n) { stack <int> s1;//存储每次处理节点结果 stack <int> s2;//存储每次处理n的结果 s1.push(m); s2.push(n); while(!s1.empty()){ while(m != 0){//如果m不为0,则有下一步节点 if(n == 0){//ackman函数某个节点出口 m = m - 1; n = 1; s1.push(m);//把下一个节点存入栈 s2.push(1);//存入下一个节点 } else {//此时m不为0,且n不为0,根据ackman函数,我们需要进行下一次存点操作 n = n - 1; s1.push(m - 1); s2.push(-1);//表明这是一个节点了 } } n = n + 1;//出口,运算结果+1 while(!s1.empty() && s2.top() != -1){//如果某个结果运算完了,则把运算过的步骤清除 s1.pop(); s2.pop(); } if(!s1.empty()){ m = s1.top(); s2.pop();//进行下一个节点的运算 s2.push(n); } } return n; } int main() { cout << ack(1,2); return 0; }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}