问答题 斐波那契数列Fn定义如下:F0=0,F1=1,Fn=Fn-1+Fn-2,n=2,3,…就此斐波那契数列,回答下列问题。
问答题 在递归计算Fn时,需要对较小的Fn-1,Fn-2,…,F1,F0精确计算多少次?
【正确答案】从题中可知:F0=0,F1=1,F2=1,F3=2,F4=3,F5=5,F6=8,…
Fn=Fn-1+Fn-2
=2Fn-2+Fn-3(即F3Fn-2+F2Fn-3)
=3Fn-3+2Fn-4(即F4Fn-3+F3Fn-4)
=5Fn-4+3Fn-5(即F5Fn-4+F4Fn-5)
[*]
=Fn-1F1+Fn-2F0
归纳起来,在递归计算Fn时,需要对较小的Fn-1计算1(即F2)次,Fn-2计算2(即F3)次,…,F1计算Fn次,F0计算Fn-1次。
以计算F5为例,其递归调用树如图所示。从图中可以看到,F4计算1次,F3计算2次,F2计算3次,F1计算F5(=5)次,F0计算F4(=3)次。
[*]
【答案解析】
问答题 如果用大O表示法,递归计算Fn时递归函数的时间复杂度是多少?
【正确答案】设计算Fn的时间复杂度为T(n),有
T(n)=T(n-1)+T(n-2)<2T(n-1)
<22T(n-2)
[*]
<2nT(0)
=O(2n)
又有
T(n)=T(n-1)+T(n-2)
>2T(n-2)
>22T(n-4)
[*]
>2n/2T(1)(n为奇数时;或2n/2T(0),n为偶数时)

T(n)>O(2n/2)

O(2n/2)<T(n)<O(2n)
取最坏情况上限,即T(n)=O(2n)。
【答案解析】