浅析python递归函数和河内塔问题
关于递归函数:
函数内部调用自身的函数。
以n阶乘为例:
f(n)=n!=1x2x3x4x...x(n-1)x(n)=nx(n-1)!
deffactorial(n): ifn==1: return1 returnn*f(n-1)
//调用过程如下:
>>f(5) >>5*f(4) >>5*4*f(3) >>5*4*3*f(2) >>5*4*3*2*f(1) >>5*4*3*2*1 >>120
从上面的例子可以直观得看到递归函数在不断的调用自己的函数,直到n==1(函数出口)。
关于河内塔:
规则:
1.三根柱子,A,B,C
2.A柱子上的盘子从小到大排列,最上面的是最小的,最下面的是最大的。
3.将A上的盘子移动到C上,移动过程中始终保持,最大的在下面,最小的在上面。
假设A柱子上有一个盘子,可以直接从A移动到C完成:
A-->C
假设A柱子上有两个盘子,需要借助B,移动到C:
A-->B
A-->C
B-->C
将A最上面的盘(2-1)移动到B,然后将A中剩下一块盘移动到C,最后将B中的盘移动到C
假设A柱子上有三个盘子,需要借助B移动A上面的两个盘,然后将A剩下最大的盘移动到C,最后将B中的盘移动到C。
A-->C
A-->B
C-->B //这三步将A上前两个盘子移动到B
A-->C//这一步将A上最大的盘子移动到C
B-->A
B-->C
A-->C//后面这三步将B上的盘子移动到C
原理是将A上的(n-1)块盘移动到B,然后A中剩下的,也是最大的一块盘移动到C,最后将B上(n-1)块盘移动到C。
defHanoi(n,a,b,c): ifn==1: print("HanoiTowermove",a,"-->",c) return Hanoi(n-1,a,c,b) Hanoi(1,a,b,c) Hanoi(n-1,b,a,c) print("Whenthereis1ringonA") Hanoi(1,'A','B','C') print("Whenthereare2ringsonA") Hanoi(2,'A','B','C') print("Whenthereare3ringsonA") Hanoi(3,'A','B','C') print("Whenthereare4ringsonA") Hanoi(4,'A','B','C')
以上所述是小编给大家介绍的python递归函数和河内塔问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!