函数执行流程*

递归Recursion

递归的性能

 递归总结

递归练习:

#
def fac(n):
if n==1:
return n
return n*fac(n-1) def fac1(n, f=1):
if n == 1:
return f
f *= n
return fac1(n - 1, f)
#
def revert1(n,lst=[]):
lst.append(n%10)#可以考虑用divmod()函数
return lst if n//10==0 else revert1(n//10,lst) def revert1(num,tarhet=[]):
if str(num):
target.append(num[len(num)-1])
revert1(num[:len(num)-1])
return target
#
ef peach1(days=10):
if days==1:
return 1
return (peach1(days-1)+1)*2 def peach2(days=1):
if days==10:
return 1
return (peach2(days+1)+1)*2

匿名函数

生成器***

生成器应用

yield from

练习:

#1.#利用isinstance判断是否是字典,是的继续递归,否则合并key,赋值新字典
source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}
# # target = {'a.b': 1, 'd.f.g': 4, 'd.e': 3, 'a.c': 2}
target={}
def func(src,targetkey=''):
if not isinstance(src,dict):
return None
for k,v in src.items():
if isinstance(v,dict):
func(v,targetkey=targetkey+k+'.')
else:
target[targetkey+k]=v

#参考:https://www.cnblogs.com/bolenzhang/p/8366365.html
alphabet=b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"  #参照Base64编码表
def base64(src):
ret = bytearray()
length = len(src)
# r记录补0的个数
r = 0
for offset in range(0, length,3):
if offset + 3 <= length:
triple = src[offset:offset+3]
else:
triple = src[offset:]
r = 3 - len(triple)
triple = triple + '\x00'*r print(triple.encode(),r)
     #int.from_bytes函数参考:https://blog.csdn.net/Clovera/article/details/79293108
b = int.from_bytes(triple.encode(), 'big')#bytes类型的变量x,转化为十进制整数
print(b)
     
    
    #01100001
for i in range(18, -1, -6):
if i == 18:
index = b >> i
else:
index = b >>i & 0x3F  #十六进制3f等于十进制63,二进制表示为 0011 1111,因为我们是按6位取
ret.append(alphabet[index]) for i in range(1,r+1):
ret[-i] = 0x3D
return ret print(base64('abcd')) #ASCII码与字符相互转换
ord()函数:它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
chr()函数:在 range(256)内的(就是0~255)整数作参数,返回当前整数对应的ASCII字符。

#3#动态规划方法!
str1 = 'ahcdef'
str2 = 'hcadef'
def maxSubstring(str1,str2):
if not str1 or not str2:
return None
length1 = len(str1)
length2 = len(str2)
#建立辅助二维数组
arr = [[0 for i in range(length1+1)]for j in range(length2+1)]
p = 0#用于记录最大长度的下标
maxlength = 0#记录最大的子串长度 for i in range(length1):
for j in range(length2):
if str1[i] == str2[j]:
arr[i+1][j+1] = arr[i][j] + 1
if arr[i+1][j+1]>maxlength:
maxlength = arr[i+1][j+1]
p = i+1
return str1[p-maxlength:p],maxlength

Python基础知识5-递归函数、生成器的更多相关文章

  1. 1.17 Python基础知识 - 迭代器和生成器初识

    可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...

  2. python基础知识---迭代器、生成器、装饰器

    一.迭代器 二.生成器 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html def func(): #定义生成器,和普通函数的区别是 ...

  3. Python基础知识总结笔记(四)函数

    Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...

  4. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  5. python基础知识(二)

    以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

  6. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

  7. python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  8. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  9. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  10. python基础知识小结-运维笔记

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...

随机推荐

  1. Mysql 主键如何实现持久化

    自增主键没有持久化是个比较早的bug,这点从其在官方bug网站的id号也可看出(https://bugs.mysql.com/bug.php?id=199) 首先,我们可以直观的重现如下. mysql ...

  2. Linux文件系统的基本结构

    Linux文件系统结构 通过下面两张图片来认识一下Linux文件系统的结构. 当前工作目录 实践: 文件名称 这些规则不仅适用于文件,也适用于文件夹. 实践: ls命令 ls命令表示列出当前工作目录的 ...

  3. iview-admin框架运行步骤

    第一步: 前往github下载整个iview-admin框架的全部源码 github地址: https://github.com/iview/iview-admin 第二步: 点击Clone or d ...

  4. AngularJS学习之旅—AngularJS 服务(八)

    1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 Angular ...

  5. SQLServer之创建AFETER DELETE触发器

    DML AFTER DELETE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...

  6. Python基础——6面向对象编程

    类和实例 类是抽象的模版,例如汽车:而实例则是拥有相同方法的类的实现,例如汽车里面有大众.宝马.奔驰等等,这些车都能在地面上跑,但是它们的具体数据可以不一样. calss Student(object ...

  7. .net 调用java service 代理类方法

        通过Svcutil.exe 工具生成代理类调用 1.找到如下地址“C:\Windows\System32\cmd.exe”  命令行工具,右键以管理员身份运行(视系统是否为win7 而定) 2 ...

  8. 【题解】P2324 [SCOI2005]骑士精神

    ·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...

  9. day17-异常处理

    今天的内容比较少,只是单独的异常处理 开始今日份整理 1.异常 定义:异常时错误发生的信号,一旦出错,并且程序没有处理这个错误,就会抛出异常,并且程序会运行中止 2.异常的分类 2.1语法错误:pyt ...

  10. 好程序员web前端分享18个用CSS制作出来的东西

    好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...