递归算法与迭代算法之间的转换方法

求解极限:

\sqrt{1+2\sqrt{1+3\sqrt{1+4\sqrt{1+5\sqrt{......}}}}},对这个数列极限问题,首先将其转化为易于计算机求极限的表达形式,通过简单的归纳,可以发现该数列项的递推关系式,不妨考虑该数列的第5项,\sqrt{1+2\sqrt{1+3\sqrt{1+4\sqrt{1+5\triangle _{x5}}}}}的重新表示问题。

若取X1=1,则:_{X2=\sqrt{1+5_{X1}}}=\sqrt{1+5},

_{X3}=\sqrt{1+4_{X2}}=\sqrt{1+4\sqrt{1+5}}

_{X4}=\sqrt{1+3_{X3}}=\sqrt{1+3\sqrt{1+4\sqrt{1+5}}}

_{X5=\sqrt{1+2_{X4}}}=\sqrt{1+2\sqrt{1+3\sqrt{1+4\sqrt{1+5}}}},

这实际上获得了X5的另一种数学表达形式,即递推关系式:

X1=1,_{Xk}=\sqrt{1+(5+2-k)_{Xk-1})}(k=2,3,4,5))

归纳可知,数列的一般项Xn为

X1=1,^{_{Xk}}=\sqrt{1+(n+2-k)_{Xk-1})}(k=2,3,4,5,...n))

据此递推关系式,可方便地设计出计算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(迭代的是人,递归的是神)。递归是计算机所具备的特质(数据存储大,运算速度快),而特别赋予计算机的一项超强功能,但是,人们并不习惯也不擅长用递归来解决问题。

用递归方式思考问题的求解方法,用迭代方法去求解问题。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值