python循环嵌套与函数递归(汉诺塔)作业
程序员文章站
2022-06-23 17:16:02
...
一.循环嵌套
昨天做到一个利用循环嵌套的作业,如下图,第一反应六个print解决,但老师要求两层循环
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真的是点睛.
二.递归之汉诺塔
直接上题目
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)即可,于是很容易的解决了.