使用计数器创建递归函数

我想用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)可以工作-但不允许使用全局变量


哔哔one
浏览 152回答 2
2回答

慕婉清6462132

您可以将计数器存储在函数本身中: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.counterIsaacRule.counter = 0print(IsaacRule(10, 1000))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python