学习Python算法:递归算法
我们已经学习了递归函数。递归函数使用递归算法。之前,我们通过一般的斐波那契数列学习了递归函数。在本节中,我们将了解有关递归算法的更多信息。 。
1。递归算法
计算机科学中的递归算法(英语:recursionalgorithm)是指通过反复将问题分解为相似的子问题来解决问题的方法。递归方法可以用来解决许多计算机科学问题,因此它是计算机科学中非常重要的概念。递归算法具有三个特点:
1)递归过程一般由函数或子过程来实现。
2)递归算法在其内部直接或间接调用自己的算法。
3)递归算法是将大规模问题转化为小规模问题,然后调用递归函数来解决的过程。
递归算法也有一些需要注意的地方。我们在前面的递归函数中也提到过,分别是:
1)递归调用函数本身和函数本身。
2)递归效率比较低,有时间限制时不建议使用。
3)递归过程中必须有明确的结束条件,即递归退出。
2。汉诺塔问题
汉诺塔问题也是一个非常经典的算法问题。
问题描述如下:
汉诺塔是一个古老的游戏。
一共有3列,编号为1、2、3。
1号药丸从大到小共有n个盘子。
每次移动顶板时,都可以将其移动到其他柱子上。
任何盘子都不能堆叠在较小的盘子之上。
请移动。从第 1 柱到第 3 柱的所有板块。
从:
![]()
移动到此:
![]()
现在,n 个板块是给出的最短移动时间。 。首先我们分析一下这三个板块的运动:
->
![]()
->
![]()
->
![]()
->
![]()
i❀ ❀ ❿ 步骤:将盘子 有了结果我们就可以与照片中显示的一致。注意代码中的hanoi(n,a,b,c)表示将A柱上的n块板通过B柱移动到C柱,hanoi(n-1,1 ,3,2)然后hanoi(n-1,2 ,1,3)进行,主要是通过这个递归函数来完成支柱的运动 3.总结 在我们的学习中经常会用到递归的思维。上一个递归函数中的内容。 = 打印('这是步骤 %d:将盘子 %d 从 %s 移动到 %s'%(i,n ,fr,to)) i + 1def 河内(n,a,b,c): 如果 = 1: 移动(1,a,c) else ::河内(n) -1, a,c,b) 移动(n,a,c) 河内(n-1,b,a,c) __name__ == '__main__': n n I '__main__'__main__'__main__' 输入我们 3 测试动作 按照上图对应的步骤操作:123456789 输入A中的盘子数量:3开始移动这是1A移动到C这是步骤2:移动板2从A到B这是步骤3:将板2从A移动到B这是步骤3是步骤4:将板3从A移动到C这是步骤5:将板1从B移动到A从B移动到C这是步骤7:将板1从A移动到C
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网