-1

On a call to fib(10), how many times is fib(4) computed? I can't seem to figure this out, could anyone help?

def fib ( n ):

        if n < 3:

            return 1

        else:

            return fib(n-1) + fib(n-2)

Trying to figure out how many times fib(4) is computed.

SaggySav
  • 1
  • 1

2 Answers2

1

Set T(n) = the times fib(n) call fib(4)

We know that

T(4)=1, T(5)=1

T(n) = T(n-1)+T(n-2)

So

T(6) = T(5) + T(4) = 2
T(7) = T(6) + T(5) = 3
T(8) = T(7) + T(6) = 5
T(9) = T(8) + T(7) = 8
T(10) = T(9) + T(8) = 13

Also you can make some changes in your code

a = 0

def fib ( n ):
        if(n==4):
            global a
            a=a+1
            print(a)

        if n < 3:
            return 1

        else:
            return fib(n-1) + fib(n-2)

fib(10)
Jason Lee
  • 24
  • 6
1

You can add a counter to the function

def fib (n, cntr = None):
    if cntr is None:
        cntr = {}
    cntr[n] = cntr.get(n, 0) + 1   # update count of current argumenet
    
    if n < 3:
        return 1
    else:
        return fib(n-1, cntr) + fib(n-2, cntr)  # mutate cntr in recursive calls

Test

cntr = {}              # Initialize counter
print(fib(10, cntr))   # Calculate fib(10)
# Output: 55

print(cntr[4])         # get count of number of times fib(4) called
# Output: 13
DarrylG
  • 16,732
  • 2
  • 17
  • 23