如果您也有兴趣T(n)
为此找到一个明确的公式可能会有所帮助。
我们知道T(1) = c
和T(2) = 2c
和T(n) = T(n-1) + T(n-2) + c
。
因此,只需编写T(n)
并开始扩展。
T(n) = T(n-1) + T(n-2) + c
T(n) = 2*T(n-2) + T(n-3) + 2c
T(n) = 3*T(n-3) + 2*T(n-4) + 4c
T(n) = 5*T(n-4) + 3*T(n-5) + 7c
and so on.
您会看到系数本身就是斐波那契数!
调用斐波F(n)
那nth
契数。 F(n) = (phi^n + psi^n)/sqrt(5)
其中phi = (1+sqrt(5))/2
和psi = -1/phi
,那么我们有:
T(n) = F(n)*2c + F(n-1)*c + (F(n+1)-1)*c
这里有一些快速代码来演示:
def fib_gen(n):
"""generates fib numbers to avoid rounding errors"""
fibs=[1,1]
for i in xrange(n-2):
fibs.append(fibs[i]+fibs[i+1])
return fibs
F = fib_gen(50) #just an example.
c=1
def T(n):
"""the recursive definiton"""
if n == 1:
return c
if n == 2:
return 2*c
return T(n-1) + T(n-2) + c
def our_T(n):
n=n-2 #just because your intials were T(1) and T(2), sorry this is ugly!
"""our found relation"""
return F[n]*2*c + F[n-1]*c + (F[n+1]-1)*c
和
>>> T(24)
121392
>>> our_T(24)
121392