python递归法求阶乘,python 阶乘算法
我们过去学过递归函数,递归函数使用递归算法。以前我们是通过最常见的魅力鼠标序列来学习递归函数的。在本节中,我们将详细了解递归算法。
1.递归算法
递归算法(英文:Recursion algorithm)是指通过将问题反复分解成相似的子问题来解决问题的方法。递归方法可以用来解决许多计算机科学问题,因此它是计算机科学中一个非常重要的概念。递归算法有三个特点:
1)递归过程一般由函数或子过程实现。
2)递归算法在其内部直接或间接调用自己的算法。
3)递归算法是将大规模问题转化为小规模问题,然后递归调用函数求解的过程。
递归算法还有几点需要注意,我们在前面的递归函数中也提到过,即:
1)递归是在函数本身中调用函数本身。
2)递归效率低,如果有时间限制的话不建议使用。
3)递归的过程中需要有明确的结束条件,即递归出口。
2.河内塔问题
汉诺塔问题也是一个经典的算法问题。
问题描述如下:
河内塔是一种古老的游戏。
有三列,编号为1、2和3。
第1列从大到小有n块板。
每次移动顶板时,都可以移动到其他列。
任何盘子都不能叠放在较小的盘子上。
请把所有的盘子从1号柱子移到3号柱子。
开始:
移动到这个:
现在,给定n个盘子,请用最短的次数描述移动的过程。
我们先来分析一下这三个板块的运动方式如下:
-
-
-
-
代码如下:i=1
defmove(n,fr,to):
globali
Print(这是步骤%d:将印版%d从%s移动到%s%(i,n,fr,to))
i=1
defhanoi(n,a,b,c):
ifn==1:
移动(1,a,c)
否则:
河内(n-1,a,c,b)
移动(n,a,c)
河内(n-1,b,a,c)
if__name__==__main__ :
N=int(输入(输入A上的板数:))
打印(“移动开始”)
河内(n, A , B , C )
让我们输入3来测试移动步长是否对应上图:输入A: 3上的板数
开始移动。
这是第一步:把1号板从A移到c。
这是第二步:把2号板从A移到b。
这是第三步:把1号板从C移到b。
这是第四步:把3号板从A移到c。
这是第五步:把1号板从B移到a。
这是第六步:把2号板从B移到c。
这是第七步:把1号板从A移到c。
结果我们可以看到和图中显示的一致。注意代码中的hanoi(n,A,b,C)的意思是通过b列将A列的N个板块移动到C列,hanoi(n-1,1,3,2)然后会执行hanoi(n-1,2,1,3),主要是通过这个递归函数来完成列。
3.摘要
递归思想在我们的学习中经常用到。如何熟练使用递归,可以参考前面递归函数中的内容。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。