解:
令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、递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
如何用生成函数求解递归方程f(n)=2f(n\/2)+cn
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成立
如何用生成函数求解递归方程f(n)=2f(n\/2)+cn
(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)
《算法导论》三种解递归式的方法
代入法要求证明,恰当选择常数 c>0,可有 T(n)≤cn lgn。首先假设此上界对所有正数 m<n 都成立,特别是对于 m=n\/2,有 T(n\/2)≤c(n\/2)lg(n\/2)。将其代入递归式,得到: 其中,只要 c≥1,最后一步都会成立。 并不存在通用的方法来猜测递归式的正确解,但总有一些试探法可以帮助做出好的猜测: 如果某...
斐波那契数列相关问题精讲
方法1:待定系数法构造满足等比的新数列 方法2:利用差分方程理论求解 方法3:矩阵幂法 方法4:生成函数(generating function),也称为母函数法 以斐波那契数列通项为例,逐一展示以上方法 方法1:公式 待定系数得到公式 的通项公式后继续凑等比数列即可。方法2:递推公式可以当作为一个差分方程看待。有...
Catalan数
也就是说,不一定每个生成函数都是用一长串多项式来表示的。比如,这个函数f(n)=1 (n当然是属于自然数的),它的生成函数就应该是g(x)=1+x+x^2+x^3+x^4+...(每一项都是一,即使n=0时也有x^0系数为1,所以有常数项)。再仔细一看,这就是一个有无穷多项的等比数列求和嘛。如果-1<x<1,那么g(x)...
我的孩子今年小学五年级,要参加Turbo Pascal 7.0小学程序设计竞赛_百度...
55. 根据键盘输入的两个数G和H,求出[G,H]中的所有质数.如果G<=2或G>H则要求重新输入. 56. 用递归方法求幂函数mn.57. 跳马问题,5*5方阵,从左上角出发,跳遍所有格.58. 一梯子有N格,小明上梯子有时一步上1格,有时一步上2格,编一程序,对任意输入的自然数N,打印出上梯子的所有可能的上法,并指出...
如何用生成函数求解递归方程H(n)=H(n-1)+9H(n-2)-9H(n-3),n>2 H(0...
用C吗?不是很难的哦,不过只有五分,有谁愿意敲那么多东西啊
牛顿迭代法牛顿迭代公式
其基本步骤是:首先,选择一个初始近似值x0,计算函数在该点的切线L,其方程为y = f(x0)+f'(x0)(x-x0)。切线与x轴的交点横坐标x1(x1 = x0-f(x0)\/f'(x0))作为一次近似值。然后,继续在x1处做切线,找到下一个近似值x2,如此反复进行,形成序列{x(n+1)=x(n)-f(x(n))\/...
c语言:用递归方法编写程序,求n阶勒让德多项式的值
if (n == 1) { return x;} return ((2 * n - 1)*x - legendre(n - 1, x) - (n - 1)*legendre(n - 2, x)) \/ n;} void main() { int n;int x;printf("请输入n的值和x的值\\n");scanf("%d %d", &n, &x);printf("P%d(%d) = %f\\n", n, x, legendre(n...
这该怎么做?高数求解
微分方程F要满足:把它对x求导,会得到:fc1,c2表示,从x到f(x,c1,c2)的映射。 如果这个方程对c1有解,就可以推出另外一个三元函数G,它对任意x都满足:再对x求导,就会得到:最后,整理出清爽的微分方程:它的解就是fc1,c2。 至于生成过程,举个例子:现在,求积分和求解微分方程两个训练集都有了。那么问题也来...