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))

执行效果:

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

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

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))

 执行效果:

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

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

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")

  执行效果:

*总结:

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

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

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

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

open_test01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值