def fib1(n): #递归方法实现
assert n>= 0
if n <=1:
return n
else:
return fib1(n-1)+fib1(n-2)
def fib2(n): #非递归方法实现
pre1 = 1
pre2 = 1
print(1,end = ',')
for i in range(n):
print(pre2,end = ',')
tmp = pre1
pre1 = pre2
pre2 = tmp + pre2
#测试
for i in range(1,20):
print(fib1(i),end = ',')
print()
fib2(20) # 都是20,fib2的输出多两个是因为fib2是从2才开始记数的
# fib1则包含了1,1的情况
运行界面:
为什么fib2多了两个,写在代码注释中了,也很好理解
def hanoi(n,x,y,z):
if n == 1:
print(x + '->' + z)
else:
hanoi(n-1,x,z,y) #将n-1个盘子从x放到y上
print(x + '->' + z) #将第n个盘子放到z上
hanoi(n-1,y,x,z) #将n-1个盘子从y放到z上
sum = int(input('请输入汉诺塔层数:'))
hanoi(sum,'X','Y','Z')
这个代码经常写,重点是理解x,y,z三个柱子的转换关系:'x’指要从这里移盘子的柱子,'y’指用于中转的柱子,'z’指盘子转移到的柱子。而都不是指具体的柱子,是抽象的。