4.采用特征方程方法求解以下递归方程:
H(0)=0
H(1)=1
H(2)=2
H(n)=H(n-1)+9H(n-2)-9H(n-3) 当n>2
![](https://img-blog.csdnimg.cn/img_convert/935697838ba6f4530ee9ed34bc2a701a.png)
7.分析求斐波那契f(n)的时间复杂度。
![](https://img-blog.csdnimg.cn/img_convert/3a9d47de26aed495a0fdea8741b9df4b.png)
9.对于一个采用字符数组存放的字符串str,设计一个递归算法求其字符个数(长度)。
#include <iostream> using namespace std;
int Length(char *str) //求str的字符个数
{ if (*str=='\0')
return 0;
else
return Length(str+1)+1;
}
void main()
{ char str[]="abcd";
cout << str << "的长度: " << Length(str) << endl;
}
上述程序的执行结果如图所示:
![](https://img-blog.csdnimg.cn/img_convert/e135b1b39c528f6199ca5b3eb4c1f1a5.png)
知识点总结(第4题和第7题):
一、线性齐次递推式的求解
常系数的线性齐次递推式的一般格式如下:
f(n)=a1f(n-1)+a2f(n-2)+…+akf(n-k) (1.1)
f(i)=bi0≤i<k
等式(1.1)的一般解含有f(n)=xn形式的特解的和,用xn来代替该等式中的f(n),则f(n-1)=xn-1,…,f(n-k)=xn-k,所以有:
xn=a1xn-1+a2xn-2+…+akxn-k
两边同时除以xn-k得到:
xk=a1xk-1+a2xk-2+…+ak
或者写成:
xk-a1xk-1-a2xk-2-…-ak=0 (1.2)
等式(1.2)称为递推关系(1.1)的特征方程。可以求出特征方程的根,如果该特征方程的k个根互不相同,令其为r1、r2、…、rk,则得到递归方程的通解 f(n)为:
![](https://img-blog.csdnimg.cn/img_convert/d5a4fbb7efeb10c4ab2976fa9821667c.png)
再利用递归方程的初始条件(f(i)=bi,0≤i<k),确定通解中的待定系数,从而得到递归方程的解。