解決遞迴式是乙個頭疼的問題,即使是只求出在大o範圍下的封閉解,
需要運用master定理,遞迴樹等等,有時仍然無法解決。
在這裡提出的方法並不是在大o意義下的,只是乙個大家都很常用的求解遞迴式的方法。
例如求解遞迴式 f(
1)f(
2n)f
(2n+
1)=α
=2f(
n)+β
,n≥1
=2f(
n)+γ
,n≥1
很容易可以假設出 f(
n)=a
(n)α
+b(n
)β+c
(n)γ
其中a(
n),b
(n),
c(n)
是只於n 有關的函式。
我們可以隨意假設出f(
n)來求取a(n
),b(
n),c
(n)
首先假設f(
n)=n
,那麼α=
1,β=
0,γ=
1 得到a
(n)+
c(n)
=n(1)
然後給f(n
) 乙個常函式,例如f(
n)=1
, 那麼α=
1,β=
−1,γ
=−1
得到 a(n
)−b(
n)−c
(n)=
1(2)
還需要乙個式子才能解出三個函式。
這時無論令f(
n)為什麼都不好做了。
那麼我們可以觀察原式。
發現如果令f(
n)=a
(n) ,那麼原式會變為 a(
1)a(
2n)a
(2n+
1)=1
=2a(
n),n
≥1=2
a(n)
,n≥1
可以直接使用歸納法解得a(
n) a
(n)=
2m,其
中n=2
m+l(
0≤l<2m
)(3)
聯立(1
)(2)
(3) 式即可解得 a(
n)b(
n)c(
n)=2
m=2m
−1−l
=l即可解得f(
n)這種方法的思想就是待定係數法。
有時還需要敏銳的觀察力和靈感。
注:我在一本書上發現了和上式形式相近的一類遞迴式通用的神奇解法,我會在仔細研究後發上來。
遞迴式與遞迴
如果你想迅速複習演算法來應付考試或者是面試的話,請看本人的其他部落格。遞迴,儘管簡單,卻並不是良藥。況且,在很多大公司看來,遞迴是一種非常麻煩並且耗時耗力的演算法。誠然,從簡單的計算角度來說,遞迴就是這樣的。但是,如果你換乙個角度來看看計算機的世界,遞迴卻是不能被忽略的。如果你是乙個有著人類智慧型的...
遞迴 氣泡排序的遞迴式寫法
第一次氣泡排序如上圖 比較順序是 01 12 23 34 第二次是 01 12 23 第三次是 01 12 第四次 01 經過這些有限次的比較以後 使得陣列元素有序。遞迴的寫法和思路也是基本相同 先上非遞迴的 基礎氣泡排序 排完序是遞減的有序序列 n是元素個數 for int i 1 i那氣泡排序就...
遞迴式求解
1 t n 不是單調函式,e.g.t n sinx 2 f n 不是多項式函式 e.g.t n t n 2 2n 3 b不能表示為乙個常量 e.g.t n 2t n 1 t n t n 2 1 2 n2 n 解 此時 a 1,b 2,f n 1 2 n2 n 故 nlogba n0 1f n nlo...