5ucms论坛

标题: 普通程序员用迭代,天才程序员用递归——Python递归 [打印本页]

作者: 很傻很天真    时间: 2017-9-24 16:24
标题: 普通程序员用迭代,天才程序员用递归——Python递归
如果说好的程序猿是IT界的伯乐,那么不得不说递归是IT界那匹宝马。
递归的思路是解决生活中很多问题的思路,更是编程是不可缺少的技巧。递归原本属于算法范畴,不属于Python语言的学习范围,但是python这一面对对象的语言,不懂的递归实在说不过去。换个角度说,随着Python近几年逐渐变得火爆,越来越多的大公司将这一脚本语言应用起来用于快速开发,会Python的小伙伴们千万不要错过这一篇内容,因为递归很可能就会成为你未来求职,做项目的一把金钥匙。
“普通程序猿用迭代,天才程序猿用递归,二B的程序猿都在当大老板。”小编希望大家在学习了递归以后能够有进一步的飞跃。
闲话少叙,现在切入正题:
先说一说什么是递归,如果你连递归都不知道,那你绝对不是一个优秀的程序猿,那我现在告诉你“递归”是什么,带你踏入优秀的门槛
[attach]240[/attach]就用神雕侠侣举个栗子,这是一个很明显的树结构,可以看做是一个大的三角形,再由三个小三角形构成。如果这个还不够明显,那我来点高逼格的,前方高能,注意带好护目镜,密集恐惧症的朋友请慎重
[attach]241[/attach]这个东西是谢尔宾斯基三角形,可以看做是一个大三角形由三个小三角形构成,三个小三角形又由三个更小的三角形构成,以此类推可以得到无限个三角形。
这个还只是二维的递归栗子,小编来个逼格跟上一层楼的,走着
[attach]242[/attach]这是谢尔宾斯基三维三角形,很酷炫吧,三维中还能分出三维,还能分出三维。尼玛啊,很凌乱,但是往往掌握了一定的规律生活中很多问题就能得到无限多个解答。这就是递归,一个函数调用自身的一个行为。
[attach]243[/attach]这就是最简单的 Python实现递归的方式,那么他运行起来啥样
[attach]244[/attach]没错,它的运行停不下来,短短几秒运行了2003行,还是我按了Ctrl+C才终止了他的运行,要不然不到地球毁灭他停不下来(前提是你的内存也无限大)。底下的提示说明他超过了Python规定的最大递归深度。
递归在网络爬虫中的应用也相当重要,难不成每一层挖掘你都要单独定义函数咩?当然不行,做这种事的都是你的老板,你是天才所以一定要用递归。
但是就目前最新的Python 3 而言,他对于递归的默认最大深度是100层,要是有爬友想要在一个资源量很丰富远远超过一百页的网站中挖掘数据该怎么办ni?那你可以自己设置一下递归的深度,就是这么简单。
[attach]245[/attach]设置就需要这两行代码。看不懂的去Python的document里面自己找吧。
话扯远了,递归函数的精华就是 return 自身的语句。
那么久以C语言入门相同的方式,以一道阶乘来用Python实现递归吧
[attach]246[/attach]或者给你来个更高逼格的
[attach]247[/attach]可见,递归的关键是设置调用函数自身和正确的返回值
但是不是所有迭代都需要递归解决,老板之所以能成为老板还是有他们聪明之处的,因为递归需要占用很长的时间和存储空间,每次递归都需要一步一步保存,之后再一步一步返还,时间和空间被牺牲了,那些天才程序猿是可以合理的使用迭代和递归,找到二者的一个balance。而且递归的风险在与稍不留神就会成为一个只进不出的无底洞,递推,归去来兮,出来混早晚是要还的。
所以各位要慎重小心使用,递归的代码确实简洁明了,但是也是一把双刃剑。
订阅小编,我会带着你一步一步通过Python的学习让你成为爬虫高手,欢迎留言,讨论交流
作者: 466308080    时间: 2017-9-24 17:24
阶乘居然用jiecheng…这英文水平也真够醉醉哒了~阶乘的英语叫——factorial,你写成汉字倒也罢了…
作者: 孤独很黑    时间: 2017-9-24 17:24
扯淡,递归效率低,天才程序员把递归改成跌代
作者: 一本童话    时间: 2017-9-24 17:24
迭代是将输出作为输入,接着再处理,不浪费可用资源,而递归是自己反复的跟自己玩,时间长了就烦了。
作者: 阿崔米sa    时间: 2017-9-24 17:24
递归绝对是能不用就别用,业务设计我尽量避免递归
作者: 刘晨    时间: 2017-9-24 17:24
尝试过遍历递归编程,结构强大固定性强,不容易串改,编辑过程好玩,但很难引用索引关系,递归一个族还可以,当遍历时就容易出错。。除非先设计一个架构,把时域空间等问题全部搭建在具体算法上。。一个人估计很难搞
作者: wjxx    时间: 2017-9-24 17:24
楼下的都去死!PHP才是最好的语言!
作者: 夜色    时间: 2017-9-24 17:24
递归,易出错,效率低,关键是不直观,有些递归没有注释就是永远的坑
作者: 暧末Ri    时间: 2017-9-24 17:24
递归需要一级一级存储再一级一级回来,难道效率高吗?//@A60452600: 扯淡,递归效率低,天才程序员把递归改成跌代
作者: 阿崔米sa    时间: 2017-9-24 17:24
看题目就知道是小白
作者: mayday    时间: 2017-9-24 17:24
头条的小便竟瞎比比,一点都不懂,在这里坑人!扰乱视听!
作者: 好运来    时间: 2017-9-24 17:24
递归效率一般比迭代低,小便说反了
作者: 孤独很黑    时间: 2017-9-24 17:24
扯吧....递归只是好理解 需要保存状态栈 就算有尾递归优化的编译器性能也不可能比迭代好啊
作者: 李杨芳    时间: 2017-9-24 17:24
书本程序员,现实程序员,递归看的漂亮不实用。
作者: cai619    时间: 2017-9-24 17:24
一看到jiecheng,就知道为什么小编这么无知了。。。
作者: 潘星    时间: 2017-9-24 17:24
吃内存凶猛得很~
作者: 安倍晋四    时间: 2017-9-24 17:24
说了这么多,然而只是py里面有递归而已
作者: 水雾影    时间: 2017-9-24 17:24
已关注
作者: 仁义之爱    时间: 2017-9-24 17:24
一看标题就知道小编找喷
作者: 仁义之爱    时间: 2017-9-24 17:24
递归是最后的选择~
作者: 绝世小虾米    时间: 2017-9-24 17:24
递归适合某些场合,但不可乱用




欢迎光临 5ucms论坛 (http://bbs.5ucms.com/) Powered by Discuz! X3.2