python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔

一、求一个整数的阶乘:

1、常用的迭代方法写法:

def jc(n):
    result = n
    for i in range(1, n):
        result *= i

    return result


nu = int(input("输入一个整数:"))
result1 = jc(nu)
print("%d的阶乘是%d" % (nu, result1))

 2、使用用递归的方法:

def fa(n):
    if n == 1:
        return 1
    else:
        return  n*fa(n-1)
    '''如输入的是5则执行过程:
    fa(5) = 5*fa(4)
        fa(4) = 4*fa(3)
            fa(3) = 3*fa(2)
                fa(2) = 2*fa(1)
                    fa(1) = 1     '''

num = int(input("输入一个整数:"))
result2 = fa(num)
print("%d的阶乘是%d"%(num,result2))

执行效果:

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔_第1张图片

 二、求斐波那契数列的第几项的值:

用数学函数形式表示斐波那契数列:

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔_第2张图片

1、常用的迭代方法写法:

def fb(n):
    n1 = 1
    n2 = 1
    n3 = 1
    if n < 1:
        print("重新输入大于等于1的数")
        return -1
    while (n - 2) > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1

    return n3


num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:
    print("第%d项的斐波那契值为%d" % (num, result))

 2、使用用递归的方法:

def fb(n):
    if n < 1:
        print("重新输入大于等于1的数")
        return -1

    if n == 1 or n == 2:
        return 1
    else:
        return fb(n - 1) + fb(n - 2)


num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:
    print("第%d项的斐波那契值为%d" % (num, result))

 执行效果:

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔_第3张图片

 三、用递归算法实现汉诺塔的解法:

汉诺塔游戏就是第一个柱子的圆盘通过中间柱子媒介和规律移动到第三个柱子且盘子上下顺序与第一个柱子开始的位置一样。

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔_第4张图片

def hanota(n, x, y, z):  # 参数n为有多少个盘子,设置参数xyz为串盘子的三个柱子
    if n == 1:
        print(x, "移动到", z)
    else:
        hanota(n - 1, x, z, y)  # 将前n-1个盘子从a移动到b上
        print(x, "移动到", z)  # 将最底下的最后一个盘子从a移动到c上
        hanota(n - 1, y, x, z)  # 将b上的n-1个盘子c上


n = int(input("请输入汉诺塔盘子的层数:"))
hanota(n, "x", "y", "z")

  执行效果:

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔_第5张图片

*总结:

1、把数学的算式用代码实现

2、在有些编程中使用递归会比一般使用迭代会便捷整洁一些,但是如果没有使用好那么用递归写出的程序会出很大的问题

3、递归采用的是分治思想

4、递归的执行效率要比迭代慢许多 如果要计算较大的值时需等计算机计算一些时间

你可能感兴趣的:(python,学习,python)