If you instrument your code like this
from collections import Counter
c = Counter()
def fib3(n):
c[n] += 1
if n < 9980:
return 1
else:
return fib3(n-1) + fib3(n-2) + fib3(n-3)
fib3(10000)
print c
You'll get a result like this
Counter({9979: 223317, 9978: 187427, 9977: 121415, 9980: 121415, 9981: 66012, 9982: 35890, 9983: 19513, 9984: 10609, 9985: 5768, 9986: 3136, 9987: 1705, 9988: 927, 9989: 504, 9990: 274, 9991: 149, 9992: 81, 9993: 44, 9994: 24, 9995: 13, 9996: 7, 9997: 4, 9998: 2, 9999: 1, 10000: 1})
Ignoring the values for keys less than 9980, you can already see that the number of calls approximately doubles for each n as n decreases
So you can estimate that the complexity as O(2n) (It's actually about O(1.839n))
If you wish to calculate the exact number of calls, you should try writing a recursive function, say fib3_count(n) that returns the number of calls required to calculate fib3(n)
EDIT:
Calculating the big-O complexity can be done by solving this equation
x**3 - x**2 - x**1 - 1 == 0
Where the complexity is O(xn)
The 3 roots to the equation are
x1 = 1.8392867552141612
x2 = (-0.41964337760708065+0.6062907292071992j)
x3 = (-0.41964337760708065-0.6062907292071992j)
Since x has to be real, we are left with: O(1.8392867552141612n)
niterations runs inO(n)time if the runtime of each iteration is bounded by a constant, but if the per-iteration runtime is not bounded in such a fashion, the loop may run in time much worse thanO(n).