基于Python的汉诺塔算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Python的汉诺塔算法相关的知识,希望对你有一定的参考价值。

首先贴出Python编写的汉诺塔算法的代码:

def hanoti(n,x1,x2,x3):
    if(n == 1):
        print(‘move:‘,x1,‘-->‘,x3)
        return
    hanoti(n-1,x1,x3,x2)
    print(‘move:‘,x1,‘-->‘,x3)
    hanoti(n-1,x2,x1,x3)

hanoti(3,‘A‘,‘B‘,‘C‘)   

汉诺塔问题归根结底就是一个循环问题,循环包括两大要素:循环体、循环结束条件

首先分析汉诺塔算法的思想:

第一步:若想将n个圆盘中最大的圆盘从A塔放到C塔,需要借助B塔放置其余的n-1个圆盘

第二步:再把B塔看做初始条件的A塔,将B塔上的n-1个圆盘依据规则放置到C塔上,这一步就是一个循环问题

依据代码来分析:

首先定义函数hanoti(n,x1,x2,x3),该函数作用是将n个圆盘从第一个参数(这里为x1)放到第三个参数(这里为x3)上,

if判断是循环的循环结束条件,意思为若只有一个圆盘,只需要将他从第一个参数(这里为x1)放到第三个参数(这里为x3)上即可,

如果不满足循环结束条件,函数继续执行,

hanoti(n-1,x1,x3,x2)语句就是执行第一步的过程,即将除最大圆盘外的n-1个圆盘从第一个参数(这里为x1)放到第三个参数(这里为x2)上,

然后输出表示移动结束的print语句,

这一句结束后,表示x2上想在放置着所有剩余的n-1个圆盘,

再继续循环hanoti(n-1,x2,x1,x3)语句,执行第二步过程,即将剩余的n-1个圆盘按同样的方法从从第一个参数(这里为x2)放到第三个参数(这里为x3)上

如此循环往复,完成汉诺塔问题

以上是关于基于Python的汉诺塔算法的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔内存分析(python)

python算法之汉诺塔

Python算法 - 递归精解 - 汉诺塔问题

python的递归算法学习:汉诺塔递归算法

python 递归实现汉诺塔算法

python每日算法 | 算法的起步与递归算法(汉诺塔问题)