Python递归算法的应用(斐波那契数列,汉诺塔)

Python递归算法的应用(斐波那契数列,汉诺塔)

记录一下以前学过的东西(* ̄︶ ̄)

  • 什么是递归
    有人可能会说,从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事,讲从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事,讲…这大概就是递归。这样的说法是有缺陷的,应该是后来终于有一天,老和尚的故事讲完了(为什么讲完了,你懂的),这才是递归。在函数的定义中使用函数自身的方法,最后还需要输出结果。

  • 递归和循环在斐波那契数列的应用

  • 斐波那契数列:
    1 1 2 3 5 8 13 21 34…
    又称黄金分割数列,是因为当数列趋于无穷时,数列的前一项和后一项的比值越接近于黄金比例0.618。
    又称兔子数列,是根据兔子的繁殖得名,第一个月有一对兔子,第二个月繁殖期不生新的兔子,所以还是一对兔子,第三个月这对兔子生一对兔子,一共两对兔子,第四个月又生下一对,第三月刚生下的那对进入繁殖期,不生…如此循环,每对兔子生下来会经历一个月繁殖期,每个月的兔子总数就是斐波那契数列。废话不多说,打码

  • 循环计算斐波那契

def Fibonacci(n):
    n1 = 1
    n2 = 1
    n3 = 1
    while (n-2)>0:
        n3 = n2+n1
        n1 = n2
        n2 = n3
        n -= 1
    return n3
month=int(input('请输入一个正整数:'))
result=Fibonacci(month)
print('第%d 月份的兔子数量为 %d' % (month,result))入代码片
  • 递归计算斐波那契
def Fibonacci(n):
    if n == 1 or n == 2:
        return 1
    elif n>2:
        return Fibonacci(n-1)+Fibonacci(n-2)
month=int(input('请输入一个正整数:'))
result=Fibonacci(month)
print('第%d 月份的兔子数量为 %d' % (month,result))

显然,递归实现简单,可读性强,但是占用空间大

  • 递归汉诺塔中的应用
    汉诺塔
    在印度,有一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。(这群印度人要是那个时候会递归僧侣们会被打死)
    我们需要按照规则将A上的盘子(没有金片就用盘子了)移动到C上
def hanoi(n,a,b,c): # 将n个盘子借助b从a移动到c
    if n == 1:
        print(a,'-->',c)
    else:
        hanoi(n - 1, a, c, b) # 先将n-1个盘子借助c从a移动到b
        print(a,'-->',c) # 再将第n个盘子从a移动到c
        hanoi(n - 1, b, a, c)  # 将n-1个盘子借助a从b移动到c
n = int(input('汉诺塔的层数为:'))
hanoi(n,'A','B','C')

好了,仅仅只是记录下以前学过的一些东西,写的不好就请见谅

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值