斐波那契数列想必大家都不陌生,使用递归便可以实现它的算法,但是你是否有想过递归函数的时间复杂多少呢?今天我们就来看一下关于递归的那些事。
斐波那契数列 Fn 定义如下
F0=0, Fl=1, Fn=Fn-1+Fn-2, n=2,3…
请就此斐波那契数列,回答下列问题。
(1) 在递归计算 Fn 的时候,需要对较小的 Fn-1,Fn-2,…, Fl, F0 精确计算多少次?
(2) 如果用大 O 表示法,试给出递归计算 Fn 时递归函数的时间复杂度是多少?
我们一个一个的来解决:
-
[1] 第一问可能会是很多人无从下手,别急我们可以先实例化,从少的数列发现规律,加入我们是计算F5,则有:F5=F4+F3,F4=F3+F2,F3=F1+F2,F2=F1+F0.这时我们来计算F1,F0精确计算了多少次,为了方便计算,我们画图来表示:
-
解决了第一问,那么第二问就很好解决了,我们已经计算出了递归次数为2^n-1
那么递归的时间复杂度为O(f(n))=O(2^n-1)
就是O(2^n).
你学会了吗?????