我想用2个参数(步骤,数字)创建一个递归函数。递归内发生一些带有数字的事件,并使用步骤1和一个新数字再次调用该函数。一旦steps == 0我想增加一个计数器,就可以看到遇到了多少个步骤0的函数调用,具体取决于函数中的算法。有没有办法做到这一点-如果没有全局变量或其他参数,那么两者都是不可能的!我尝试了:if not counter in locals(): counter=0但这不起作用,它说UnboundLocalError: local variable 'counter' referenced before assignment这里是完整的代码:def IsaacRule(steps, number):if not counter in locals(): counter = 0 if steps == 0: counter+=1 return counter if ((number - 1) / 3) % 2 == 1: IsaacRule(steps-1, (number - 1) / 3) if (number * 2) % 2 == 0: IsaacRule(steps-1, number*2) return counter使用全局变量(并且该函数外部的counter = 0)可以工作-但不允许使用全局变量
2 回答

慕婉清6462132
TA贡献1804条经验 获得超2个赞
您可以将计数器存储在函数本身中:
def IsaacRule(steps, number):
if steps == 0:
IsaacRule.counter+=1
return IsaacRule.counter
if ((number - 1) / 3) % 2 == 1:
IsaacRule(steps-1, (number - 1) / 3)
if (number * 2) % 2 == 0:
IsaacRule(steps-1, number*2)
return IsaacRule.counter
IsaacRule.counter = 0
print(IsaacRule(10, 1000))
添加回答
举报
0/150
提交
取消