欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python循环嵌套与函数递归(汉诺塔)作业

程序员文章站 2022-06-23 17:16:02
...

一.循环嵌套

        昨天做到一个利用循环嵌套的作业,如下图,第一反应六个print解决,但老师要求两层循环
python循环嵌套与函数递归(汉诺塔)作业

def hanshu(num):
    a=1
    b=1
    m=1
    while a<=num:
        d=b
        for c in range(1,num+1):
            if d<= c <=num+6-a:
                print(c,end="")
        for n in range(1,m):
            if m<=num:
                print(n,end='')
        print()
        m+=1
        b+=1
        a+=1

hanshu(6)

        虽然这题没啥意义,但是还是做了很久,循环嵌套里外函数控制行,内函数控制列,这个图形可以从中间用"/"拆成两部分就可以很好解决,但是刚开始没想到怎么控制行开头数字加1,感觉这个d=b真的是点睛.

二.递归之汉诺塔

直接上题目
python循环嵌套与函数递归(汉诺塔)作业
python循环嵌套与函数递归(汉诺塔)作业

def hanshu(n,a,b,c):
    if n==1:
        print(a, '-->', c)
    else:
        hanshu(n-1,a,c,b)
        print(a, '-->', c)
        hanshu(n-1,b,a,c)
        
hanshu(3,'A','B','C')

        这题递归很容易想出怎么解决,如果A上有n个圆盘,则先要借助C移动n-1个到B上,然后将A最下面的移动C上,最后借助A将B上的移动到C上,如此下去,n-1,n-2,n-3…,3,2,1便递归下去了,可是有想法却不知道怎么实现输出步骤,刚开始惯性的以为hanshu(n,a,b,c)里的abc就是代表ABC,后来才发现这是TM是参数啊,hanshu(1,a,b,c)就是a–>c,这是if里定下的,所以后面如果执行从B到C,只要改成hanshu(n,b,a,c)即可,于是很容易的解决了.

相关标签: python基础