如何用生成函式求解遞迴方程fn2fn

2021-03-06 16:31:27 字數 2064 閱讀 7352

1樓:116貝貝愛

^^^^解:令f(1)=c

f(2)=2c+2

f(4)=2(2c+2)+4 = 4c+8

f(8) = 2(4c+8)+8 = 8c+24

f(16) = 2(8c+24)+16 = 16c+64

f(2^k) = c*2^k + p(k)

考慮p(k)

p(0) = 0

p(1) = 2 *p(0) + 2

p(2) = 2*p(1)+4

p(n-2) = 2*p(n-3)+2^(n-2)

p(n-1) = 2*p(n-2)+2^(n-1)p(n)

= 2* p(n-1) + 2^n = 2*2*p(n-2)+2*2^(n-1)+2^n

= 4p(n-2)+2*2^n

= 4*2p(n-3)+4*2^(n-2)+2*2^n

歸納得到p(n) = 2^kp(n-k)+k*2^n = 2^np(n-n)+n*2^n =n*2^n

所以p(n-1) = (n-1)2^(n-1)

2*p(n-1)+2^n = 2*(n-1)*2^(n-1) + 2^n=p(n) 得到驗證

帶回f(2^k)得到f(2^k) = c*2^k+k*2^k,對於任意常數c成立

性質:1、 子問題須與原始問題為同樣的事,且更為簡單。

2、不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。

3、由一種(或多種)簡單的基本情況定義的一類物件或方法,並規定其他所有情況都能被還原為其基本情況。

4、遞迴演算法解題相對常用的演算法如普通迴圈等,執行效率較低。因此,應該儘量避免使用遞迴,除非沒有更好的演算法或者某種特定情況,遞迴更為適合的時候。在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。

遞迴次數過多容易造成棧溢位等。

2樓:不思議

記n = 2^k, f(n) = f(2^k) = h(k),

那麼有h(k) = 2*h(k-1) + c*2^k

記 // sigama就是求和號,這裡打不出來,只好這樣寫

// sigama[k=0,無窮]分別是求和號的下標和上標

g(x) = sigama[k=0,無窮] h(k)*x^k

2x*g(x) = sigama[k=0,無窮] 2*h(k)*x^(k+1)

g(x)-2*x*g(x) = (1-2x)*g(x)

= h(0) + sigama[k=0,無窮] (h(k+1) - 2*h(k))*x^(k+1)

= h(0) + c * sigama[k=0,無窮] 2^(k+1)*x^(k+1)

= h(0) + c * sigama[k=0,無窮] (2*x)^(k+1)

= h(0) + c * (2*x/(1-2*x))

故g(x) = h(0)/(1-2*x) + c * (2*x/(1-2*x)^2)

= h(0)/(1-2*x) + c * (1/(1-2*x)^2 - 1/(1-2*x))

= (h(0) - c) * 1/(1-2*x) + c * 1/(1-2*x)^2

= (h(0) - c) * sigama[k=0,無窮] (2*x)^k

+ c * sigama[k=0,無窮] (k+1)(2*x)^k

// 為了方便計算設f(1) = h(0) = 0, f(2) = h(1) = 2*c

// 其實不這樣設也可以的,計算過程與下面類似

= (- c) * sigama[k=0,無窮] (2*x)^k

+ c * sigama[k=0,無窮] (k+1)(2*x)^k

= c * sigama[k=0,無窮] k * (2*x)^k

= sigama[k=0,無窮] c * k * (2*x)^k

= sigama[k=0,無窮] h(k)*x^k

所以h(k) = c * k * 2^k,

而n = 2^k

則f(n) = h(k) = c * k * 2^k = c * n * log2 n;

// log2 n 表示以2為底的對數

f(n) = o(n * log2 n)

Excel中如何用方程式函式作圖

您可以試試以下操作 1.選擇兩列 一列 a 作為x,一列 b 作為y,如果y x平方 2,可以將第一版列從1.14,在第二列輸權 入 a1 a1 2 回車,然後往下填充,知道第14行。2.在空白地方插入圖表,選擇型別為折線圖,子圖為第一個圖,下一步輸入a b兩列,完成即可。希望對您解決問題能有所幫助...

用C語言或C 遞迴函式生成Catalan三角形的數

include define n 20 void fun int arr n int r,int c,int n else if c 0 else if r c else int main return 0 c 程式設計計算卡特蘭數的 用無符號64位計算 最高可以計算33個卡特蘭數 如果還需要更大 ...

如何用matlab求解時滯偏微分方程組

這是matlab中dde23的例抄 子,通過這個例襲子,應該能看懂dde23個引數的作用.直接複製後邊的 就可以輸出圖形.ddex1 example 1 for dde23.this is a example of wille and baker that illustrates the strai...