python - 查找Python中调用Ackerman函数的次数

标签 python ackermann

我想创建一个返回两个值的函数。第一个应该是 ackerman 函数的输出,第二个应该是调用该函数的次数。

我已经制作了 Ack 函数:

def ack(m,n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 0:
        return ack(m - 1.0, 1.0)
    elif m > 0 and n > 0:
        return ack(m - 1.0, ack(m, n - 1.0))

我尝试进行全局计数并将其添加到 if 和 elif 之前,然后将其与答案一起返回:

global count
count +=1

if m == 0:
    return n+1, count

这显然是错误的。每次 m = 0 时它都会返回计数,并且它将是一个元组。

我怎样才能让它返回(例如)ack(3,4)的答案列表,它应该是125,以及它必须调用ack(m,n)的次数。所以如果我调用 ack(1.0,0.0) 它应该返回 [2.0, 2]。我需要一个列表,因为我需要用该总和进行一些计算。

我需要知道的原因是因为老师给我们布置了一份作业,而我完全陷入困境。

最佳答案

每次递归时只需添加 1:

def ack(m,n):
    if m == 0:
        return (n + 1, 1)
    elif m > 0 and n == 0:
        a, cnt = ack(m - 1.0, 1.0)
        return a, cnt+1
    elif m > 0 and n > 0:
        a1, cnt1 = ack(m, n - 1.0)
        a2, cnt2 = ack(m - 1.0, a1)
        return a2, 1 + cnt1 + cnt2



>>> ack(3, 4)
    (125.0, 10307)
>>> ack(1, 0)
    (2.0, 2)

关于python - 查找Python中调用Ackerman函数的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23047680/

相关文章:

python - 使用python为帖子数量添加最大限制

python - 如何修复这个 AttributeError?

python - FunctionApp 未导入 python 模块

r - 使用 R 中的 Ackermann 函数避免堆栈溢出

c - 如何迭代地编写阿克曼函数?

python - Qt 和 PyQt 混合应用

python - 在 tkinter.text 中的选项卡下方插入垂直线

java - 标准阿克曼可以优化吗?

recursion - 对象不适用于 MIT 方案(不同的阿克曼函数)