当前位置 : 主页 > 编程语言 > python >

数据结构与算法python版(2)-递归与汉诺塔问题

来源:互联网 收集:自由互联 发布时间:2022-08-10
递归简介 递归的两个特点:调用自身和结束条件 如: def func ( x ): if x 0 : print ( x ) func ( x - 1 ) func ( 3 ) 执行结果如下: 3 2 1 这里需要注意一下,如将打印语句放到下面,如下代码,结果


递归简介

  • 递归的两个特点:调用自身和结束条件

如:

def func(x):
if x>0:
print(x)
func(x-1)

func(3)

执行结果如下:

3
2
1

这里需要注意一下,如将打印语句放到下面,如下代码,结果将是完全不一样的

def func(x):
if x>0:
func(x-1)
print(x)

func(3)

执行结果如下:

1
2
3

2、汉诺塔问题

  • 汉诺塔问题:
  • 数据结构与算法python版(2)-递归与汉诺塔问题_算法

  • 当n=2时操作步骤:
    原始状况如下,目标是将A上的两个都移动到C上
  • 数据结构与算法python版(2)-递归与汉诺塔问题_递归_02

  • 步骤一:将A上的小盘从A移动到B
  • 数据结构与算法python版(2)-递归与汉诺塔问题_算法_03

  • 步骤二:将A盘上的大盘移动到C
  • 数据结构与算法python版(2)-递归与汉诺塔问题_算法实现_04

  • 步骤三:将B上的小盘移动到C,结束
  • 数据结构与算法python版(2)-递归与汉诺塔问题_数据结构_05

  • 当n个盘时,思路是将A上的n-1个盘看做是一个小盘,将A最下面的大盘看做是一个大盘,此时即和n=2时的思路一致了
  • 数据结构与算法python版(2)-递归与汉诺塔问题_数据结构_06

  • 步骤一:将A上n-1个盘移动到B
  • 数据结构与算法python版(2)-递归与汉诺塔问题_算法实现_07

  • 步骤二:将A上最下面的大盘移动到C盘
  • 数据结构与算法python版(2)-递归与汉诺塔问题_算法实现_08

  • 步骤三:将B上的n-1个盘移动到C盘上
  • 算法实现如下:
def hanoi(n,a,b,c):
"""
将n个盘从a经过b移动到c
:param n:
:param a:
:param b:
:param c:
:return:
"""
if n>0:
hanoi(n-1,a,c,b)
print(f"moving {n} from {a} to {c}")
hanoi(n-1,b,a,c)

if __name__=="__main__":
print("---------------- n=2 -----------------------------")
hanoi(2,"A","B","C")
print("---------------- n=3 -----------------------------")
hanoi(3, "A", "B", "C")
print("---------------- n=4 -----------------------------")
hanoi(4, "A", "B", "C")

执行结果如下:

---------------- n=2 -----------------------------
moving 1 from A to B
moving 2 from A to C
moving 1 from B to C
---------------- n=3 -----------------------------
moving 1 from A to C
moving 2 from A to B
moving 1 from C to B
moving 3 from A to C
moving 1 from B to A
moving 2 from B to C
moving 1 from A to C
---------------- n=4 -----------------------------
moving 1 from A to B
moving 2 from A to C
moving 1 from B to C
moving 3 from A to B
moving 1 from C to A
moving 2 from C to B
moving 1 from A to B
moving 4 from A to C
moving 1 from B to C
moving 2 from B to A
moving 1 from C to A
moving 3 from B to C
moving 1 from A to B
moving 2 from A to C
moving 1 from


上一篇:数据结构与算法python版(1)-算法简介
下一篇:没有了
网友评论