首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ackermann函数的迭代实现

Ackermann函数的迭代实现
EN

Code Review用户
提问于 2017-02-28 16:49:51
回答 1查看 2.2K关注 0票数 2

下面是Ackermann函数的迭代实现,以供审查:

代码语言:javascript
运行
复制
#include <stack>
#include <iostream>
#include <tuple>
#include <vector>

int Ackermann(int m, int n) {
    std::stack<int> s;
    s.push(m);
    while (!s.empty()) {
        m = s.top();
        s.pop();
        if (m == 0 || n == 0)
            n += m + 1;
        else {
            s.push(m - 1);
            s.push(m);
            n--;
        }
    }
    return n;
}

int main() {
    std::vector<std::tuple<int, int, int>> tests{
        { 0, 0, 1},
        { 1, 0, 2},
        { 1, 1, 3},
        { 2, 1, 5}
    };

    for (auto const &test : tests) {
        using std::get;

        auto result = Ackermann(get<0>(test), get<1>(test));
        if (result == get<2>(test)) {
            std::cout << "Ackermann(" 
                       << get<0>(test) << ", " 
                       << get<1>(test) << ") == " 
                       << result << ": passed\n";
        }
        else {
            std::cerr << "Error: Ackermann(" 
                      << get<0>(test) << ", " 
                      << get<1>(test) 
                      << ": expected" << get<2>(test) 
                      << ", but got: " << result << "\n";
        }
    }
}

如有任何意见请见谅。

EN

回答 1

Code Review用户

发布于 2017-02-28 17:25:49

Ackermann函数的结果可以增长相当大。保证一个int最多可以覆盖32767。

一张二维记忆表可能是值得的。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/156552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档