python之递归
递归的特征:有调用自身函数的行为 2.有正确的返回条件(不能写成死循环了)
1. 汉诺塔
def hanoi(n,x,y,z): #n代表盘子的层数(个数),x代表盘子的初始位置,y代表盘子中间缓存的位置,z代表盘子的目的位置,这三个位置一定要搞清楚!!!
if n == 1:
print(x,"-->",z)
else :
hanoi(n-1,x,z,y)#先将n-1个盘子放到Y上去()
print(x,"-->",z)#再将第n个盘子(最底下的盘子)从X放入到Z上面去
hanoi(n-1,y,x,z)#最后把在Y上面的n-1个盘子放到Z上面去
hanoi(3,"a","b","c")
2. 求阶乘
``python
def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
num = input("请输入一个整数,以便求其阶乘:")
num = int(num)
print("%d 的阶乘是 %d"%(num,factor(num)))
3.一块长方形能被切割成完全一样的正方形的边长是多少?
这个问题实际上就是求两个数的最大公约数(辗转相除法),那么辗转相除法是怎么用的呢,好像小学就学过了,脑子不好使,都忘记了。经过多方求证,终于知道了,下面举个例子
比如求18和24的最大公约数:
24/18 = 1…6
18/6 = 3…0
所以6是他们两的最大公约数
def haha(a,b): #b>a
c = b%a
if c == 0:
print("最大公约数为%d"%(a))
else:
if (a > c):
return haha(c,a)
else:
return haha(a,c)
haha(18,24)
来源:CSDN
作者:zzy_2016
链接:https://blog.csdn.net/zzy_2016/article/details/104619084