1.介绍
普通的程序员使用迭代,天才程序员使用递归。什么是递归?下面这个图很形象地表现了递归思想。递归的标准定义是这样的,递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
2.举例
①斐波拉契数列,第一项和第二项为1,后面的使用以下递推式来求取。
其实现代码如下
def fib(x):
if x < 2:
if x==0:
return 0
else:
return 1
else:
return fib(x-1)+fib(x-2)
print(fib(5))
②汉诺塔
最近在学习python,看到小甲鱼视频里面递归的地方举的汉诺塔的例子,觉得很神奇,实在是妙,因此记录下来。汉诺塔相信大家都玩过,其规则就不说了。说一下玩这个游戏的中心思想,要想实现圆盘从X到Z的移动,且在移动过程中遵守规则(大的圆盘不能放在小的圆盘上面),实质上就是以下三个步骤(这里以7个为例):
(1)将X上的前6个圆盘移到Y上;
(2)将X上剩下的一个最底下的圆盘移到Z上;
(3)将Y上剩下的6个圆盘移到Z上。
这里来分析一下,在上述的步骤一中要实现X上六个圆盘移动到Y上,这一过程又可以分解为先将前5个移动到Z上,剩下的第六个移动到Y上,再将Z上的五个移动到Y上。这个过程是否很熟悉,是的,和上述三个步骤一样的操作。因此我们只需要递归调用第一个步骤就能实现最后的结果。
具体代码如下:
def hanoi(n, x, y, z):
if n==1:
print(x, '-->', z)
else:
hanoi(n-1, x, z, y)#将前n-1个圆盘从X移动到Y
print(x, '-->', z)#将X的最底下的最后一个圆盘移到Z
hanoi(n-1, y, x, z)#将X的最底下的最后一个圆盘移到Z
n=int(input('请输入汉诺塔层数:'))
hanoi(n,'X','Y','Z')
输出结果就是实现步骤,不得不说代码很简洁,当时看到代码就像知道整个运行过程具体是怎样的,后来想明白了,以n=3为例,其过程如下: