函数执行流程*

递归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. 修改tomcat的端口号

    一.环境 tomcat7.0.notepad++(这个是一个文本编辑器,用记事本也可以) 二.修改方法 端口        第一步:找到tomcat7的conf目录下的 server.xml这个文件, ...

  2. Selenium自动化-入门1

    起初写博客是为了妹子学习,现在发现忽略了最基础的Selenium教程,所以:从本博客开始编辑 Selenium 入门知识.(学好Java) Selenium 入门 1:(学好Java) 录制回放,简单 ...

  3. JavaScript 包装对象

    万物皆对象 在JavaScript里,万物皆对象.但是某些对象有别于其它对象,我们可以用 typeof 来获取一个对象的类型,它总是返回一个字符串. typeof 123; // 'number' t ...

  4. ajax发送请求跨域 - uri java代理

    问题:ajax发送请求出现cors跨域 解决办法:可以通过java代理的方式,后台发送请求 1.get请求 public void proxyGet(String url) { try { URL r ...

  5. SVN上传的时候没法显示文件名,只显示后缀名

    之前在用SVN上传android代码的时候,发现上传列表上的文件没法显示名字,只显示了后缀名,就像这样: 各种疑惑,最终发现解决方法: 右键单击操作栏的status: 然后在出现的选项里面将filen ...

  6. c/c++ linux 进程间通信系列2,使用UNIX_SOCKET

    linux 进程间通信系列2,使用UNIX_SOCKET 1,使用stream,实现进程间通信 2,使用DGRAM,实现进程间通信 关键点:使用一个临时的文件,进行信息的互传. s_un.sun_fa ...

  7. 【转载】FPGA算法设计随笔

    FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...

  8. python文件上传

    1.前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. 虚拟机硬盘vmdk压缩瘦身并挂载到VirtualBox

    这个问题其实困扰了挺久的,一直没闲情去解决,网上搜索过很多压缩方法感觉都太麻烦太复杂,因最近在windows上搞docker就一并解决了. 压缩vmdk 首先下载DiskGenius,这工具很牛X,相 ...

  10. 三数之和的golang实现

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...