递归算法与迭代算法之间的转换方法
求解极限:
,对这个数列极限问题,首先将其转化为易于计算机求极限的表达形式,通过简单的归纳,可以发现该数列项的递推关系式,不妨考虑该数列的第5项,
的重新表示问题。
若取X1=1,则:,
,
这实际上获得了X5的另一种数学表达形式,即递推关系式:
X1=1,
归纳可知,数列的一般项Xn为
X1=1,
据此递推关系式,可方便地设计出计算Xn的递归函数和迭代函数。
//递归函数
double Recursive(int n,int k){
if(k==1){
return 1;//递归出口
}else{
return sqrt(1+(n+2-k)*Recursive(n,k-1));//递归过程
}
}
//迭代函数
double Iterative(int n){
double x=1;//迭代出自取1
for(int k=2;k<=n;k++){
x=sqrt(1+(n+2-k)*x);//迭代
}
return x;
}
对比递归函数与迭代函数迭代函数更容易理解一些,计算机科学家L.P.Deutsch曾说过:To iterate is human,to recurse divine(迭代的是人,递归的是神)。递归是计算机所具备的特质(数据存储大,运算速度快),而特别赋予计算机的一项超强功能,但是,人们并不习惯也不擅长用递归来解决问题。
用递归方式思考问题的求解方法,用迭代方法去求解问题。