递归三部曲(阶乘,斐波拉契数列,汉诺塔)

#    递归

#   3! = 1*2*3
#   n! = 1*2*3*........*n-1*n
#   n! = n * (n-1)! = n * (n-1) * (n-2)! = ...... = n * (n-1) * (n-2) * ...... * 2 * 1
#   那么如何用函数来实现数学中的阶乘呢

# def test(a):
#     for item in range(1, a+1):
#         print(item)
# test(3)

#   通过上面函数我们实现了a 值   1——a  的罗列

def test(n):
    res = 1
    for item in range(1, n+1):
        res = res *item
    return res
print(test(4))

#   上面这是非递归方式,下面试试递归

def test1(a):
    if a == 1:
        return a
    else :
        return a * test1(a-1)


print(test1(4))

#   注意,递归需要一个跳出的条件,就像上面的if   a == 1:  return a  这就是递归的跳出条件


#      斐波那契数列
def fblq(li):
        if li == 0 or li== 1:
            return 1
        else:
            return fblq(li -1) + fblq(li - 2)
for i in range(20):
    print(fblq(i),end=',')





def hanoi(n, x, y, z):
    if n == 1:
        print(x, '————>', z)  #   如果只有一层,那么从x直接移动到z就行
    else:
        hanoi(n - 1, x, z, y)   #将前n-1层从x移动到y(以z为跳板)
        print(x, '————>', z)    #将最底层从x移动到z
        hanoi(n - 1, y, x, z)   #将y上的n-1层移动到z(以x为跳板)
n = int(input('请输入汉诺塔层数:'))
hanoi(n, 'x', 'y', 'z')

时间仓促,就直接上程序了,要说的都在注释里了,万望海涵。

猜你喜欢

转载自blog.csdn.net/an_ostrich/article/details/88580627