Python:递归与非递归实现斐波那契数列+汉诺塔实现

斐波那契数列实现代码:


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’指盘子转移到的柱子。而都不是指具体的柱子,是抽象的。

你可能感兴趣的:(Python)