这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战
递归
递归的特点
- 会调用自身
- 结束条件 我们看以下四个函数,看哪些函数符合递归:
- 第一个函数func1,虽然它调用的自身,但是它没有结束条件,如果调用这个函数它会一直调用自身,是一个死递归。
- 第二个函数func2,虽然它看似加了一个结束条件,但是当传入的参数x本身大于0时,这个递归就不会停止,也是一个死递归。
- 第三个函数func3,它满足递归的两个条件,是合法递归。
- 第四个函数func4,它和func3一样是一个合法递归,但是它们打印x的位置不一样。由于递归的性质,如果将x=3传入两个函数,func3会打印321,func4会打印123.
汉诺塔问题
什么是汉诺塔问题
汉诺塔题是递归中一个非常著名的算法问题,它来自古代的一个传说,这个问题的具体来源和内容如下:
假设有A,B,C三个柱子,要将柱子A上的n个圆盘移动到柱子C上。 当n=1时:直接将圆盘从A移动C即可 当n=2时:
- 首先将小圆盘从A移动到B
- 然后将大圆盘从A移动到C
- 最后将小圆盘从B移动到C 当为n个圆盘时: 我们将前n-1个圆盘作为整体,将第n个也就是A上最下面的一个圆盘作为一个整体,移动的过程为以下几步:
- 首先将n-1个圆盘从A经过C移动到B
- 然后将第n个圆盘从A移动到C
- 最后将n-1个圆盘从B经过A移动到C 我们看第1步和第3步,它们时比原问题规模小了1的同样一个问题,这就是递归,这两步原问题递归的子问题(规模比原问题小)。
汉诺塔问题实现(python)
python实现如下,n为圆盘的数量,a、b、c分别为A、B、C三个柱子。