2017-10-03 12 views
0
` 
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.' 

これはフィボナッチの再帰呼び出しの数を追跡するために、グローバル変数を使用してのバージョンがあり、私の質問は使用せずにバージョンを記述する方法でありますグローバル変数?Pythonでグローバル変数を使用せずに、フィボナッチ数の再帰呼び出しの数を追跡2.7

`

+0

fibをクラスのメソッドにすると、インスタンス変数で呼び出し回数を追跡できます。 – jq170727

+0

@ jq170727、それは基本的にグローバル変数を使用するのと同じです。 –

+0

@ JohnLaRooy - 私たちはクラスFibを持ち、2つのインスタンスf1、f2があるとします。それぞれは独自のカプセル化されたコールカウントを持ちます。状態の一部がグローバルな名前空間に存在しないため、グローバル変数とは基本的に同じだとは思わない - それにアクセスする唯一の方法はf1/f2インスタンス参照によるものだ。 – jq170727

答えて

0

それは(fib(n), numcalls)のタプルを返すようにあなたはfibを変更する必要があります。

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 
関連する問題