# 递归算法的三大特点

# 1、递归过程一般通过函数或子过程来实现

# 2、递归算法在函数或子过程的内部,直接或间接调用自己的算法

# 3、递归算法实际上是把问题转换为规模缩小的同类问题的子问题,然后递归调用函数或过程来表示问题的解

# 递归算法要注意的事项

# 1、递归是在过程或函数中调用自身的过程

# 2、递归必须有一个明确的递归结束条件,成为递归出口

# 3、递归算法比较简洁,但运行效率较低

# 4、递归调用过程,系统用栈来存储每一层的返回点和局部量,如果递归次数过多,容易造成栈溢出

# 递归算法的三大特点
# 1、递归过程一般通过函数或子过程来实现
# 2、递归算法在函数或子过程的内部,直接或间接调用自己的算法
# 3、递归算法实际上是把问题转换为规模缩小的同类问题的子问题,然后递归调用函数或过程来表示问题的解
# 递归算法要注意的事项
# 1、递归是在过程或函数中调用自身的过程
# 2、递归必须有一个明确的递归结束条件,成为递归出口
# 3、递归算法比较简洁,但运行效率较低
# 4、递归调用过程,系统用栈来存储每一层的返回点和局部量,如果递归次数过多,容易赵成栈溢出# 斐波那契数列
fiblist = {}def fibnum(n):if (n <= 1):return 1if n not in fiblist:fiblist[n] = fibnum(n - 1) + fibnum(n - 2)return fiblist[n]def fibrecur(n):assert n >= 0, "n > 0"if n <= 1:return 1return fibrecur(n - 1) + fibrecur(n - 2)def move(n, a, b, c):if n == 1:print(a, '-->', c)returnelse:move(n - 1, a, c, b)move(1, a, b, c)move(n - 1, b, a, c)def binary_search(alist, item):if len(alist) == 0:return Falseelse:midpoint = len(alist)//2if alist[midpoint]==item:return Trueelse:if item<alist[midpoint]:return binary_search(alist[:midpoint],item)else:return binary_search(alist[midpoint+1:],item)def binary_search2(min, max, d, n):# min表示有序列表头部索引# max表示有序列表尾部索引# d表示有序列表# n表示需要寻找的元素mid = (min + max) // 2if max < min:print('未找到%s' % d[mid])elif d[mid] < n:print('向右侧找!')binary_search2(mid+1, max, d, n)elif d[mid] > n:print('向左侧找!')binary_search2(min, mid-1, d, n)elif d[mid] == n:print('索引{0}找到了目标值{1}'.format(mid,n))if __name__ == '__main__':for i in range(0, 20):print('loop-', i, fibnum(i))for i in range(0, 20):print(i, ':', fibrecur(i), end=' ')# 1 2 : 2 3 : 3 4 : 5 5 : 8 6 : 13 7 : 21 8 : 34 9 : 55 10 : 89 11 : 144# 12 : 233 13 : 377 14 : 610 15 : 987 16 : 1597 17 : 2584 18 : 4181 19 : 6765 89print(fibrecur(6))  # 13num = 4print('把', num, '个盘子全部移到C柱子的顺序为:')move(num, 'A', 'B', 'C')data = [1, 3, 6, 13, 56, 123, 345, 1024, 3223, 6688]print(binary_search(data,3223))print(binary_search(data, 3333))binary_search2(0, len(data)-1, data, 3223)binary_search2(0, len(data)-1, data, 3333)

python递归算法(斐波那契数列,汉诺塔、二分法查找)相关推荐

  1. python递归算法——斐波那契数列

    文章目录 一,递归方法: 二,斐波那契数列简介: 特性一: 特性二: 两种方法运行时间对比: / 一,递归方法: / 递归方法为:将问题一步步分解,直到得到可以解决的简单问题. 通常涉及直接或间接条用 ...

  2. 递归算法小结(数的阶乘、斐波那契和汉诺塔问题)

    递归是一项重要的编程技术,它让函数可以从函数体内部调用自身.递归通常把一个大型复杂的问题层层简化为一个,与原问题相似的规模较小的问题来求解,使用递归策略只需少量的程序就可描述出解题过程所需要的多次重复 ...

  3. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  4. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  5. 两个经典递归问题:菲波那契数列 + 汉诺塔

    一.递归问题的处理步骤 1)抽象出递归公式:对实际问题进行部分穷举,抽象出递归关系(关键),并列出"递归表达式" 2)确定递归出口:找出递归调用终止点 二.菲波那契数列 实际问题: ...

  6. 数据结构Java02【栈、队列、单链表(增删节点)、循环链表、双向循环链表、递归(斐波那契、汉诺塔)】

    学习地址:[数据结构与算法基础-java版]                  

  7. python编写递归函数、求斐波那契数列_利用Python实现斐波那契数列的方法实例

    今天我们来使用Python实现递归算法求指定位数的斐波那契数列 首先我们得知道斐波那契数列是什么? 斐波那契数列又叫兔子数列 斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推 ...

  8. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...

  9. python求斐波那契数列第n个数及前n项和_使用python求斐波那契数列中第n个数的值示例代码...

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...

  10. python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释...

    python中斐波那契数列 by Pau Pavón 通过保罗·帕文(PauPavón) The Fibonacci sequence is, by definition, the integer s ...

最新文章

  1. Python3连接PostgreSQL(10.5)数据库
  2. 从一个文件夹下随机抽取一定数量(比例)的图片移动到另一个文件夹 Python3实现
  3. maven pom配置文件样本
  4. D盘提示RAW文件如何找回
  5. 2020 ICPC亚洲区域赛(沈阳)F-Kobolds and Catacombs(思维+模拟)
  6. erp生产管理系统流程_企业生产管理好帮手——ERP智能管理系统
  7. html5怎么改为vue_Vue.js 项目打包优化实践
  8. 一键安装thrift-0.9.0的脚本
  9. 抽象 封装 继承 多态
  10. 【开源】爬取QQ空间说说及简易数据分析
  11. ExtJs6学习(一)【ExtJs介绍】
  12. Vite 中 npm run dev 报错 Error: spawn vue3-test2\node_modules\esbuild\esbuild.exe ENOENT
  13. 用计算机算出别人多少岁,年龄计算器 年龄计算器查询
  14. python read_csv chunk_Python chunk读取超大文件
  15. 笔记本计算机待机后显示器,Win10笔记本电脑休眠唤醒后屏幕还是黑屏怎么办?...
  16. 知物由学 | 听声辨人,看声纹识别技术如何保障内容安全?
  17. 替换固态硬盘后不能开机
  18. EasyPR-Java新能源车牌识别
  19. 正当防卫裁判要旨16条
  20. DBN+LSTM神经网络电容量回归分析,基于MATLAB编程的深度信念网络+lstm回归分析,

热门文章

  1. Java接口(笔记本USB接口案例)
  2. 做一个有流量的标题党
  3. 牛客练习赛51 C 勾股定理 (结论题)
  4. 开发落网电台windows phone 8应用的计划(7)
  5. vw 前端_Vw / Vh 更好的做前端适配
  6. 基于python的jieba分词
  7. 分辨率PPI(Pixel Per Inch)与DPI(Dot Per Inch)
  8. crontab每周一到周五
  9. android p支持4.1,版本过老 Android P将不再支持这类应用
  10. 邮件传输过程,MUA,MTA,MDA的概念