Python基于递归算法实现的汉诺塔与Fibonacci数列示例

 更新时间:2018年04月18日 14:20:57   作者:快递小可  
这篇文章主要介绍了Python基于递归算法实现的汉诺塔与Fibonacci数列,结合实例形式分析了汉诺塔与Fibonacci数列的递归实现技巧,需要的朋友可以参考下

本文实例讲述了Python基于递归算法实现的汉诺塔与Fibonacci数列。分享给大家供大家参考,具体如下:

这里我们通过2个例子,学习python中递归的使用。

1. 找出Fibonacci数列中,下标为 n 的数(下标从0计数)

Fibonacci数列的形式是这样的:0,1,1,2,3,5,8,13……

① 使用while循环,python2代码如下:

def fib(n):
  a,b=0,1
  count=0
  while count<n:
    a,b=b,a+b
    count=count+1
  print a

运行结果如下:

>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5

② 使用递归(递归必须要有边界条件),python2代码如下:

def fib(n):
  if n==0 or n==1:#递归的边界条件
    return n
  else:
    return fib(n-1)+fib(n-2)

运行结果如下:

>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5

递归是最能表现计算思维的算法之一,我们以f(4)为例,看一下递归的执行过程:

同一程序,使用递归虽然程序简洁,但递归的执行效率要比循环低,系统的资源消耗比循环大。因为递归是一层一层地往里面调用,结束后又一层一层地返回,所以递归的执行效率并不高。那为什么还要使用递归呢?因为有一些问题,我们找不到非常明显的循环方案,但容易找到明显的递归方案。比如说著名的汉诺塔问题。

2. 汉诺塔

下图是一个简化版的汉诺塔游戏,只有4个盘子:

汉诺塔游戏规则如下:

python2代码如下:

def hanoi(a,b,c,n):
  if n==1:#递归结束条件
    print a,'->',c
  else:
    hanoi(a,c,b,n-1)
    print a,'->',c
    hanoi(b,a,c,n-1)

运行结果:

>>> hanoi('A','B','C',1)
A -> C
>>> hanoi('A','B','C',2)
A -> B
A -> C
B -> C
>>> hanoi('A','B','C',3)
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python搭建Gitee图床的示例代码

    Python搭建Gitee图床的示例代码

    在写博客的过程中经常要插入图片,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,感兴趣的可以了解一下
    2021-10-10
  • Python中optionParser模块的使用方法实例教程

    Python中optionParser模块的使用方法实例教程

    这篇文章主要介绍了Python中optionParser模块的使用方法,功能非常强大,需要的朋友可以参考下
    2014-08-08
  • 基于KL散度、JS散度以及交叉熵的对比

    基于KL散度、JS散度以及交叉熵的对比

    这篇文章主要介绍了基于KL散度、JS散度以及交叉熵的对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 解读FastAPI异步化为transformers模型打造高性能接口

    解读FastAPI异步化为transformers模型打造高性能接口

    这篇文章主要介绍了解读FastAPI异步化为transformers模型打造高性能接口问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • python编写微信公众号首图思路详解

    python编写微信公众号首图思路详解

    这篇文章主要介绍了python编写微信公众号首图的思路,根据微信公众号首图要求,可以上传一个不超过5M的图片,且图片尺寸要是2.35:1的尺寸,具体实现思路及代码感兴趣的朋友跟随小编一起看看吧
    2019-12-12
  • python中的元组与列表及元组的更改

    python中的元组与列表及元组的更改

    这篇文章主要介绍了python中的元组与列表及元组的更改,元组是由一对方括号构成的序列。列表创建后,可以根据自己的需要改变他的内容,下面更多详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)

    Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)

    这篇文章主要介绍了Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python矩阵的转置和逆转实例

    python矩阵的转置和逆转实例

    今天小编就为大家分享一篇python矩阵的转置和逆转实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python如何获取当前路径并列出当前路径下的所有文件

    Python如何获取当前路径并列出当前路径下的所有文件

    这篇文章主要介绍了Python如何获取当前路径并列出当前路径下的所有文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 五分钟带你搞懂python 迭代器与生成器

    五分钟带你搞懂python 迭代器与生成器

    这篇文章主要介绍了python 迭代器与生成器的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08

最新评论