递归调用与二分法

1、递归调用

递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身.

示例:
def age(n):
if n == 1:
return 18 # 结束条件
return age(n-1)+2 # 调用函数本身
print(age(5))
打印结果
26

递归的执行分为两个阶段:

1 递推

2 回溯

示例图

递归特性:

1、必须有一个明确的结束条件

2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3、递归效率不高,因为每次调用自身时,都会在内存中创建一个新的内存空间,当不断循环调用非常多次时,是非常耗内存的。

2、二分法

主要应用于有序序列中,原理是每次查找都将原序列折半,逐渐缩小查找范围的一种算法。

例如查找一个数字,查找了打印 ‘find it’ 没有查到打印 'not exists'

l = [1,2,5,7,10,31,44,47,56,99,102,130,240]

def binary_search(l,num):

    print(l)

    if len(l) == 1:

        if l[0] == num:

            print('find it')

        else:

            print('not exists')

        return

    mid_index=len(l)//2

    mid_value=l[mid_index]

    if num == mid_value:

        print('find it')

        return

    if num > mid_value:

        l=l[mid_index:]

    if num < mid_value:

        l=l[:mid_index]

    binary_search(l,num)

binary_search(l,31)

最新文章

  1. 初见SpringMVC
  2. Qt for Android开发环境搭建及测试过程记录
  3. sklearn学习笔记1
  4. vs.php调试php使用外部的apache进行调试
  5. HD OJ2023
  6. [Oracle] Oracle和SQLServer的数据类型比较
  7. 利用ajax获取到的网页源码不能执行js代码
  8. shell编程的一些例子5
  9. Mysql 5.6主从同步配置与解决方案
  10. 页面按F5重复提交数据解决方法
  11. Shell脚本,自动化发布tomcat项目【转载】
  12. Spring装配bean--01组件扫描和自动装配
  13. 在Ubuntu终端彻底删除软件
  14. CentOS修改系统时间
  15. 归并排序及优化(Java实现)
  16. 0417 jQuery基础知识
  17. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程
  18. 获取clock ticks per second
  19. CSS3属性上调
  20. [Java核心技术笔记]并发

热门文章

  1. smali 语法参考
  2. 使Gallery时设置居左显示
  3. MySQL四-2:完整性约束
  4. mac上搭建docker镜像私服
  5. 基于markdown的blog系统调研1:typecho
  6. 嵌入式驱动开发之sensor---sensor 图形传感器调试
  7. 几种session存储方式比较
  8. 并行编程(2) - sum.msic.Unsafe 二
  9. Expression Tree上手指南 (一)
  10. D-hdu 1465 不容易系列之一(递推)