我想创建一个返回两个值的函数。第一个应该是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]。我需要一个清单,因为我需要用这笔钱进行一些计算。
我需要知道的原因是老师给我们的任务,我完全陷入困境。
答案 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)
答案 1 :(得分:0)
只需添加一个计数并递增每次调用:
def ack(m,n):
if m == 0:
return n + 1, 1
elif m > 0 and n == 0:
res, count = ack(m - 1, 1)
return res, count + 1
elif m > 0 and n > 0:
t, tc = ack(m, n - 1)
res, rc = ack(m - 1, t)
return res, tc + rc + 1