“递归算法”实质及过程分析

1.递归算法实质分析

        递归算法也即 “将原有问题分解为新的问题,而解决问题时又用到了原有问题的解法”。也就是,将问题层层分解为它的简化子集,而最终分解出来的问题,是一个已知解的问题。

        如下图所示:

 

        例如:求1+2+3+4+5+6+...+100,我们则可以使用递归算法计算。下面就这个例子进行分析,求1+2+...+100的和,也就是从1到100的每个数进行相加,那么我们将这个问题转化为每次两个数进行求和,如100+(99+(98+(97+(……+(1))))),可以定义为:sum=sum(n-1)+n,这样我们只需要一个循环就可以求出结果。当然,也有其他方式,在此只用来作为例题进行说明。

2.递归过程分析

2.1 第1阶段:递推。

        将"原有问题"---(不断分解)--->"新的子问题",逐渐从 未知--->已知,最终达到已知条件,即递归结束条件,表明递推结束。如下图所示:

 

       下面以求 5! (5的阶乘)为例进行说明:

 5!=5x4!----->  4!=4x3!-----> 3!=3x2!-----> 2!=2x1!-----> 1!=1x0!-----> 0!=1

        最初的5!是未知的,因为我们不知道5!等于多少。

        但是我们知道 0!=1 这一特殊情况,因此我们从5!向4!、3!、2!、1!、0!进行推进,因此将 5!这一未知的问题转化为已知的 0!问题,即“递推”。

2.2 第2阶段:回归。

        什么是回归?回归也即"从已知条件出发----(按递推的逆过程)---->逐一求值回来",最后到达递归开始处,结束回归阶段,完成整个递归过程。如下图所示:

 

        我们以上述求 5! (5的阶乘)为例进行进一步说明:

        (1)上述过程中我们对求5!的阶乘进行了“递推”,即:

 5!=5x4!----->  4!=4x3!-----> 3!=3x2!-----> 2!=2x1!-----> 1!=1x0!-----> 0!=1

        (2)现在,我们将5!的递推进行“回归”,如下所示:(仔细观察颜色标注哦)

5!=5x4!=5x24=120 <-----  4!=4x3!=4x6=24 <----- 3!=3x2!=3x2=6

                              <----- 2!=2x1!=2x1=2<----- 1!=1x0!=1x1=1<----- 0!=1

        从上面(1)、(2)结合进行分析,我们可以观察出,“递归”的过程也即“先递推再回归”,“递推”是将问题进行分解到最终已知结果,“回归”是从最终的已知结果反向回到最初的问题上,即递推的逆过程。

        整个回归过程开始从0!开始求值,因为0!=1是已知的,这样每一步结果我们都是已知的,最终得出5!。

        那么,如何设计5!递归算法呢?在这里只简略说明,具体应用即举例说明点击所撰写的对应文章标题链接“C++通过递归算法求n的阶乘(1.1) ”或“ 利用C++类结构的方式求n的阶乘(2)”进行深入理解和运用。

        如下代码语句:

        number=fac(n-1)*n ,(n>0)。

        例如求 3!,则整个递推过程为:3*fac(2)--->3*(2*fac(1))--->3*(2*(1*fac(0)))--->3*(2*(1*(1))) ,因为0!=1,所以fac(0)=1。之后,则进行回归:(((1)*2)*3)=6,所以3!=3x2x1=6。

2.3 图示

        根据递归算法的递推、回归两阶段,过程如下图所示:

 3.小结

        文字有时候是抽象的,尝试用不同形式对文字进行描述,那么可以更好的解决问题,如果感到困惑,可以再看一遍哦。

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可在评论区留言。

        如果你有其他感到困惑的问题,欢迎在评论区留言,让我看到你的问题哦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等日出看彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值