算法之递归
文章来源: http://blog.seclibs.com/算法之递归/ 递归是一种应用非常广泛的算法,在很多的数据结构和算法的编码中都会用到,理解递归是非常重要的。 递归在平时的生活中也是非常常用的,当你排队的时候需要知道自己排在第几个位置,而前面的人又比较多,你不能自己数出来,就可以询问你前一个人他的位置,在他的位置基础上加一便是你的位置,那如果他也不知道他的位置呢,就可以用同样的方法,继续向前询问,直到第一个人,第一个人就不用往前问了,他直到自己是第一个,这个过程就是一个递归的过程。 去问的时候叫做“递”,返回来的时候叫做“归”,假设自己是第n排,求自己位置的函数为f(n),f(n-1)就是前一个人的位置,我们的位置就是f(n-1)+1,同样前一个人的位置也可以用这个公式来计算, 直到第一个人f(1)=1,这一整套流程便是递归的实际利用,编写成代码如下 在编写递归代码的时候,有两点必要的条件: 一个问题可以分解为多个结构相同,规模不同的子问题。 存在终止条件。 如果结构不同,那就不能构造递归了;如果不存在终止条件的话,将会无限循环,看上面的那个例子,它的终止条件就是执行到第一个人的时候,开始往后返回。 递归就这样完成了,上面这个例子是只有一个递归调用的分支,还是比较好理解的,如果有多个递归分支的话,单纯靠人脑是很难理解清楚的,计算机比较适合做重复的工作