解决递归式是一个头疼的问题,即使是只求出在大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)=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=2A(n) ,n≥1
可以直接使用归纳法解得 A(n)
A(n)=2m,其中n=2m+l(0≤l<2m)(3)
联立 (1)(2)(3) 式即可解得
A(n)B(n)C(n)=2m=2m−1−l=l
即可解得 f(n)
这种方法的思想就是待定系数法。
有时还需要敏锐的观察力和灵感。
注:我在一本书上发现了和上式形式相近的一类递归式通用的神奇解法,我会在仔细研究后发上来。