Python之递归

北城以北 提交于 2020-03-03 05:28:15

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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!