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)?上面的是經(jīng)典的遞歸算斐波那契數(shù)列!下面是測試每計算(調(diào)用)一次遞歸函數(shù),計算結(jié)果是多少并且調(diào)用了遞歸幾次!但是中間定義了global變量,存在bug,即每次調(diào)用的時候,因為numCalls是global?variable,所以每次測試i的時候,numCalls的值會連帶上一次i(i-1)的調(diào)用次數(shù)一起計算,所以這個testFib是測試不出準確值的,如果要改的話應(yīng)該怎么改?有幾種改法?為什么這么改?
添加回答
舉報
0/150
提交
取消