在Python 2.7中不使用全局变量来跟踪Fibonacci数的递归调用次数

时间:2017-10-03 04:02:51

标签: python-2.7 recursion global-variables

`
def fib(x):
"""assume x an int >= 0
    Returns Fibnacci of x"""
global numcalls 
numcalls += 1 

if x == 0 or x == 1:
    return 1
else:
    return fib(x-1) + fib(x-2)

def testfib(n):
  for i in range(n+1):
    global numcalls 
    numcalls = 0 
    print 'fib of', i, '=', fib(i)
    print 'fib called', numcalls,'times.'

这是使用全局变量来跟踪Fibonacci的递归调用次数的版本,我的问题是如何在不使用全局变量的情况下编写版本?

`

1 个答案:

答案 0 :(得分:0)

您应该更改fib,以便返回(fib(n), numcalls)的元组。

def fib(x):
    """assume x an int >= 0
        Returns tuple of (Fibonacci of x, number of calls)"""

    if x == 0 or x == 1:
        return 1, 1
    else:
        f1, n1 = fib(x-1)
        f2, n2 = fib(x-2)
        return f1 + f2, n1 + n2 + 1