fibMetered(x): global numCalls numCalls += 1 if x == 0 or x == 1: return 1 else: return fibMetered(x-1) + fibMetered(x-2) def testFib(n): global numCalls numCalls = 0 for i in range(n+1): print('fib of ' + str(i) + ' = ' + str(fibMetered(i))) print ('fib called ' + str(numCalls) + ' times') testFib(5)
上面的是经典的递归算斐波那契数列!下面是测试每计算(调用)一次递归函数,计算结果是多少并且调用了递归几次!
但是中间定义了global变量,存在bug,即每次调用的时候,因为numCalls是global variable,所以每次测试i的时候,numCalls的值会连带上一次i(i-1)的调用次数一起计算,所以这个testFib是测试不出准确值的,如果要改的话应该怎么改?有几种改法?为什么这么改?
相关分类