Python随记(7) 递归
2020-03-29 19:43
1191 查看
递归
- 函数调用自身的行为
def sum(n): if n <=0: return 'sorry,must be >=1' if n == 1: return 1 return n * sum(n-1) print(sum(100)) #求100 * 99 *98.。。。。。。*1
- 递归过程解析:递归分成两部分,递,归。以上面的阶乘为例,sum(3)>>3*sum(2) sum(2)>>2*sum(1) sum(1)==1 递时不会直接计算出每一个值然后相乘。 归:从最底层开始回到调用者,1>> 1*2>> 1*2*3
def digui(n): print(n,'递') if n>0: digui(n-1) print(n.'归') digui(3) >>>3 递 2 递 1 递 0 归 1 归 2 归 3 归
def get_num(num): if num > 2: get_num(num - 1) else: print(num) get_num(4) # 输出结果为 2 ''' 解析一下:加了else后,首先代码区有两个分支, 在num>2时,执行会有递归,当n=4 是开辟一层空间; n=3时开辟一层空间,此时 get_num(2) 再开辟一个空间, 当它从上往下执行过程中,在他本层空间遇到if num>2 不成立,所以走分支 else,直接打印出来; 此时代码还没结束,回到上一层空间,num=3, num>2 已经进入了if 不会走else, num=4 也不会走else,所以这两层空间没有值输出! ''' ———————————————— 版权声明:本文为CSDN博主「storyfull」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/storyfull/article/details/102671946
(找了好多文章,就上面这个写的详细,我就不一点一点搬运了。。好好研究加深见解吧。。。脑部链接)
- python对递归深度是有限制的,但是如果要写爬虫,就要自行设置递归的深度限制了
improt sys sys.setrecursionlimit(10000)#将深度设置为10000层
。但是递归的话每次调用函数都要进行栈操作,非常消耗时间和内存。递归用在妙处自然简洁
def max_value(ls,rs): for l in ls: if type(l) == list: rs = max_value(l,rs) continue if l > rs: rs = l return rs def max_val(ls): rs = max_value(ls,0) return rs if __name__ == '__main__': list1 = [4,1,3,11,[1,6,8],[[1,3],[6,15]]] list2 = [5,[5,7,9,2],3,[2,6,16],9] result1 = max_val(list1) result2 = max_val(list2) print('list1:%r\nMAX:%s\nlist2:%r\nMAX:%s' %(list1,result1,list2,result2) ———————————————— 版权声明:本文为CSDN博主「LeeGene..」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_42279077/article/details/82897118
这个递归进子列表的例子就很棒啊,以后在文件系统时也会用到递归去进入子文件。
4.
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def years(n): if n == 1: return 10 else: return years(n-1) + 2
斐波那契数列的递归问题:
def fab(n): if n < 1: print('输入有误!') return -1 elif n == 1 or n == 2: return 1 else: return ferber(n-1)+ferber(n-2)
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python随记(10) os.path pickle模块 运用递归找子目录的文件
- Python3之函数和函数递归
- python编程练习---递归输出杨辉三角
- python递归生成器
- Python递归绘制分形树
- 常见递归问题 Python解法
- stackless突破python用户级线程库和复杂递归---<<python核心编程第二版>>
- Python递归查找文件(os.path, fnmatch,glob)
- python递归深度报错--RuntimeError: maximum recursion depth exceeded
- python 实现文件的递归拷贝实现代码
- 递归创建级联目录之Python_VS_PHP
- python之递归栈溢出优化方式
- Python基础之初识递归
- python 递归程序中对象的浅拷贝与深拷贝
- python非递归全排列
- 斐波那契 python递归实现法
- python 函数递归 尾递归
- python基础之递归、二分法
- python二叉树递归总结
- python 实现目录的递归复制