5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 12658|回复: 20
打印 上一主题 下一主题

普通程序员用迭代,天才程序员用递归——Python递归

[复制链接]

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
跳转到指定楼层
楼主
发表于 2017-9-24 16:24:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如果说好的程序猿是IT界的伯乐,那么不得不说递归是IT界那匹宝马。
递归的思路是解决生活中很多问题的思路,更是编程是不可缺少的技巧。递归原本属于算法范畴,不属于Python语言的学习范围,但是python这一面对对象的语言,不懂的递归实在说不过去。换个角度说,随着Python近几年逐渐变得火爆,越来越多的大公司将这一脚本语言应用起来用于快速开发,会Python的小伙伴们千万不要错过这一篇内容,因为递归很可能就会成为你未来求职,做项目的一把金钥匙。
“普通程序猿用迭代,天才程序猿用递归,二B的程序猿都在当大老板。”小编希望大家在学习了递归以后能够有进一步的飞跃。
闲话少叙,现在切入正题:
先说一说什么是递归,如果你连递归都不知道,那你绝对不是一个优秀的程序猿,那我现在告诉你“递归”是什么,带你踏入优秀的门槛
就用神雕侠侣举个栗子,这是一个很明显的树结构,可以看做是一个大的三角形,再由三个小三角形构成。如果这个还不够明显,那我来点高逼格的,前方高能,注意带好护目镜,密集恐惧症的朋友请慎重
这个东西是谢尔宾斯基三角形,可以看做是一个大三角形由三个小三角形构成,三个小三角形又由三个更小的三角形构成,以此类推可以得到无限个三角形。
这个还只是二维的递归栗子,小编来个逼格跟上一层楼的,走着
这是谢尔宾斯基三维三角形,很酷炫吧,三维中还能分出三维,还能分出三维。尼玛啊,很凌乱,但是往往掌握了一定的规律生活中很多问题就能得到无限多个解答。这就是递归,一个函数调用自身的一个行为。
这就是最简单的 Python实现递归的方式,那么他运行起来啥样
没错,它的运行停不下来,短短几秒运行了2003行,还是我按了Ctrl+C才终止了他的运行,要不然不到地球毁灭他停不下来(前提是你的内存也无限大)。底下的提示说明他超过了Python规定的最大递归深度。
递归在网络爬虫中的应用也相当重要,难不成每一层挖掘你都要单独定义函数咩?当然不行,做这种事的都是你的老板,你是天才所以一定要用递归。
但是就目前最新的Python 3 而言,他对于递归的默认最大深度是100层,要是有爬友想要在一个资源量很丰富远远超过一百页的网站中挖掘数据该怎么办ni?那你可以自己设置一下递归的深度,就是这么简单。
设置就需要这两行代码。看不懂的去Python的document里面自己找吧。
话扯远了,递归函数的精华就是 return 自身的语句。
那么久以C语言入门相同的方式,以一道阶乘来用Python实现递归吧
或者给你来个更高逼格的
可见,递归的关键是设置调用函数自身和正确的返回值
但是不是所有迭代都需要递归解决,老板之所以能成为老板还是有他们聪明之处的,因为递归需要占用很长的时间和存储空间,每次递归都需要一步一步保存,之后再一步一步返还,时间和空间被牺牲了,那些天才程序猿是可以合理的使用迭代和递归,找到二者的一个balance。而且递归的风险在与稍不留神就会成为一个只进不出的无底洞,递推,归去来兮,出来混早晚是要还的。
所以各位要慎重小心使用,递归的代码确实简洁明了,但是也是一把双刃剑。
订阅小编,我会带着你一步一步通过Python的学习让你成为爬虫高手,欢迎留言,讨论交流

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
21#
发表于 2017-9-24 17:24:11 | 只看该作者
递归适合某些场合,但不可乱用
回复

使用道具 举报

3

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
20#
发表于 2017-9-24 17:24:11 | 只看该作者
递归是最后的选择~
回复

使用道具 举报

3

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
19#
发表于 2017-9-24 17:24:11 | 只看该作者
一看标题就知道小编找喷
回复

使用道具 举报

2

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
18#
发表于 2017-9-24 17:24:11 | 只看该作者
已关注
回复

使用道具 举报

1

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
17#
发表于 2017-9-24 17:24:11 | 只看该作者
说了这么多,然而只是py里面有递归而已
回复

使用道具 举报

3

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
16#
发表于 2017-9-24 17:24:11 | 只看该作者
吃内存凶猛得很~
回复

使用道具 举报

2

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
15#
发表于 2017-9-24 17:24:11 | 只看该作者
一看到jiecheng,就知道为什么小编这么无知了。。。
回复

使用道具 举报

0

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
14#
发表于 2017-9-24 17:24:11 | 只看该作者
书本程序员,现实程序员,递归看的漂亮不实用。
回复

使用道具 举报

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
13#
发表于 2017-9-24 17:24:11 | 只看该作者
扯吧....递归只是好理解 需要保存状态栈 就算有尾递归优化的编译器性能也不可能比迭代好啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2025-8-13 11:49 , Processed in 0.062500 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表