如何理解递归

 

递归是一个非常重要的概念,在计算机中用来表示无穷事物的一个重要手段,递归是一种表达相似性对象及动作的无限性构造的方法。 

 

再说递归之前我们先要了解迭代。

迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,因此迭代是从前往后计算的。

递归:则是一步一步往前递推,直到递归基础,寻找一条路径, 然后再由前向后计算。

简单来说:迭代是从前往后计算的,而递归则是先从后往前推,然后再由前往后计算。

 

举个例子:

计算n的阶乘。

 

这里举例计算5!

迭代:

第一步: 1!=1

第二步:2!=2*1!=2

第三步:3!=3*2!=6

第四步:4!=4*3!=24

第五步:5!=5*4!=120

 

递归:

第一步:5!=5*4!转而计算4!

第二步:4!=4*3!转而计算3!

第三步:3!=3*2!转而计算2!

第四步:2!=2*1!转而计算1!

第五步:1!=1  递归出口

然后再反向计算出结果。

 

可能大家会好奇,计算机要如何才能实现递归过程呢?

计算机系统里有系统栈,通过压栈弹栈来完成这一过程,这里就不多说了。

下面两张图大致反映了这一过程。

压栈与弹栈(这里计算的是4!)。

递归代码的执行是按照顺序来的,因为指令的执行就是按照顺序来的,这一点没啥疑问,但是递归代码中返回值的传递却是反过来的,这是通过系统栈这个结构来实现的。 

总结:递归是一个非常重要的思想,大家一定要好好理解这种思想。

 

posted @ 2018-01-26 21:26  哦摩西罗伊  阅读(3484)  评论(0编辑  收藏  举报