鱼C论坛

 找回密码
 立即注册
查看: 2700|回复: 0

[技术交流] 22 递归:这帮小兔崽子、汉诺塔 - 景命

[复制链接]
发表于 2017-7-14 21:29:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 景命 于 2017-7-14 21:26 编辑

知识点:

  • 斐波那契(Fibonacci)数列:
    斐波那契数列的基本思想就是,每一项都等于前两项的和。
            迭代实现:
    1. a = int(input("请输入斐波那契数列的项数:"))
    2. x = y = 1               #斐波那契数列的第一项和第二项的值可以确定为一。
    3. for i in range(a-2):    #因为前两项的值已将确认,所以一共运算a - 2项。
    4.     s = x + y           #将前两项的值相加赋给s
    5.     x = y
    6.     y = s
    7. print(s)
    复制代码

            递归实现:
    1. def a(n):
    2.     if n < 3:           #n为1或者n为2的时候都是一对兔子,所以返回1。
    3.         return 1
    4.     else:
    5.         return a(n-1) + a(n-2)  #这里用的分治思想来写。

    6. i = int(input("请输入一个正整数:"))
    7. s = a(i)
    8. print("%d个月后,总共有%d对兔子" % (i,s))
    复制代码

    (斐波那契的这些代码小甲鱼在视频中都有讲过,尤其是递归的代码,不懂得要仔细的看视频哦。)





  • 汉诺塔:

    汉诺塔问题可细分为
    问题一(“将x上的n-1盘子借助z移动到y上”)拆解为:
            将前n-2个盘子从x移动到z上。
            将最底下的第63个盘子移动到y上e。
            将z上的62个盘子移动到y上。
    问题二(”将y上的n-1个盘子借助x移动到z上“)拆解为:
            将前n-2个盘子从y移动到x上。
            将最底下的第63个盘子移动到z上。
            将x上的62个盘子移动到y上。

    递归实现:
    1. def hanoi(n,a,b,c):
    2. if n == 1:
    3. print(a,"->",c)
    4. else:
    5. hanoi(n-1,a,c,b)
    6. print(a,"->",c)
    7. hanoi(n-1,b,a,c)
    复制代码

    (汉诺塔问题小甲鱼在视频中有详细的讲解。)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
小甲鱼 + 3 + 3 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-26 06:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表