十四. Python基础(14)--递归
十四. Python基础(14)--递归
1 ● 递归(recursion)
|
概念: recursive functions—functions that call themselves either directly or indirectly in order to loop. 最大递归层数: the default maximum recursion depth in Python is 997. 限制条件: 一定有一个分支不调用自身 |
|
修改最大递归层数: import sys sys.setrecursionlimit(1500) COUNT = 0
def func(): global COUNT # 虽然函数内可以引用COUNT, 但是因为下面修改了COUNT, 所以要用global声明COUNT COUNT += 1 print(COUNT) func()
func() |
2 ● 递归的典型案例:
|
alex的年龄 阶乘 斐波那契数列 二分查找 三级菜单 |
3 ● alex的年龄
|
def age(n): if n == 4: return 40 return age(n+1) + 2
print(age(4)) # 40 |
4 ● 阶乘
|
def fact(n): if n == 1: return 1 return n * fact(n-1)
print(fact(4)) # 24 |
5 ● 斐波那契数列
|
def fib(n): if n ==1 or n == 2: return 1 return fib(n-1) + fib(n-2)
print(fib(6)) # 8 |
6 ● 二分查找
|
def search(num, l, start = None, end =None): start = start if start else 0 end = end if end else len(l)-1 mid = (end-start)//2 + start if start > end: return None elif l[mid] > num: return search(num, l, start, mid - 1) elif l[mid] < num: return search(num, l, mid + 1, end) elif l[mid] == num: return mid
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] print(search(66,l)) # 17 |
7 ● 三级菜单
8 ● 面试真题
|
# 提取各个fields对应的数据 data={"time":"2016-08-05T13:13:05", "some_id":"ID1234", "grp1":{ "fld1":1,"fld2":2}, "xxx2":{ "fld3":0,"fld5":0.4}, "fld6":11, "fld7":{"fld100": 0, "fld500": 0.4}, "fld46":8} #fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19 |
|
# 解法1: def select(data,fields): result = {} field_lst = fields.split('|') for key in data: if key in field_lst: result[key] = data[key] if type(data[key]) == dict: # 不要写成elif, 否则, "fld100"对应的数据无法提取出来 res = select(data[key],fields) result.update(res) return result |
|
# 解法2: def select(data,fields,result = {}): field_lst = fields.split('|') for key in data: if key in field_lst: result[key] = data[key] if type(data[key]) == dict: # 不要写成elif, 否则, "fld100"对应的数据无法提取出来 select(data[key], fields) return result
fields = 'fld2|fld3|fld7|fld19|fld100' ret = select(data,fields) print(ret) # {'fld2': 2, 'fld3': 0, 'fld7': {'fld100': 0, 'fld500': 0.4}, 'fld100': 0} |
●
|
|
十四. Python基础(14)--递归的更多相关文章
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- 十六. Python基础(16)--内置函数-2
十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...
- 四. Python基础(4)--语法
四. Python基础(4)--语法 1 ● 比较几种实现循环的代码 i = 1 sum = 0 while i <= 10: # 循环10-1+1=10次 sum += i i ...
- 「kuangbin带你飞」专题十四 数论基础
layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <............. ...
随机推荐
- 雷林鹏分享:C# 常量
C# 常量 常量是固定值,程序执行期间不会改变.常量可以是任何基本数据类型,比如整数常量.浮点常量.字符常量或者字符串常量,还有枚举常量. 常量可以被当作常规的变量,只是它们的值在定义后不能被修改. ...
- 自己动手编写IPv4地址包含关系测试的小脚本
工作中需要对地址包含关系进行测试,现有ipaddress标准库和IPy无法满足,于是自己动手编写小脚本,主要实现== , in, <等专用功能,其他功能可以后续用到再补充,例如迭代打印网段内所有 ...
- LeetCode--232--用栈实现队列
问题描述: 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队 ...
- 11月26日11月26日,周日在家practice.基本了解了layouts and Rending (guides); gem font-awesome-rails的实例用法;建立路径route, member..do的实际例子
http://fontawesome.io/examples/ content_tag(:i,"", class:"fa fa-lock fa-spin fa-lg fa ...
- Confluence 6 对一个空间进行归档后产生的影响
空间 如果一个空间被归档: 将不会在查找结果中显示,除非你选择 在归档空间中查找(Search archived spaces).如果没有归档空间的话,这个功能是隐藏的. 页面和内容将不会在 Conf ...
- Java中遍历实体类(处理MongoDB)
在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...
- 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证
一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...
- IE的“浏览器模式”和“文档模式的区别”
1.浏览器模式 用于切换IE针对该网页的默认文档模式.对不同版本浏览器的条件备注解析.发送给网站服务器的用户代理(User_Agent)字符串的值.网站可以根据浏览器返回的不同用户代理字符串判断浏览器 ...
- java把类似a=1&b=2&c=3的String类型数据转成map集合
public static Map<String, Object> transStringToMap(String mapString, String separator, String ...
- leetcode-algorithms-22 Generate Parentheses
leetcode-algorithms-22 Generate Parentheses Given n pairs of parentheses, write a function to genera ...
