我想创建一个返回两个值的函数。第一个应该是 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/