会写递归超越了多少程序员?

程序员的成长之路

共 3140字,需浏览 7分钟

 ·

2023-11-09 04:35

程序员的成长之路
互联网/程序员/技术/资料共享 
关注


阅读本文大概需要 2.8 分钟。

来自:https://www.zhihu.com/question/589779747

闪耀大叔

好多年前的我,大二,刚学c语言,啥也不会,只会递归。参加蓝桥杯,就凭这一招,拿了省赛一等奖,国赛二等奖。我以为自己很强,后来发现是这个比赛水......


后来做嵌入式,发现递归思路简单,但开销极大,经常想尽办法改成非递归......

Evan_song

恭喜你!你超越了大部分程序员!

你掌握了递归技术,说明你可以写出dfs!

使用dfs技术,你可以写二叉搜索树!

熟练运用dfs,你还可以完成线段树的编写!

二叉搜索树再随便学学,就是平衡树,你掌握了FHQ,Splay,Treap,红黑树,替罪羊树,B树!


线段树可以拓展到值域线段树!

同样的,平衡树可以拓展到文艺平衡树!

继续就是树套树!

Link-Cut-Tree!

往图论那边走走,你学会了tarjan!


tarjan可以完成割边割点,边点双连通分量!

二分图匈牙利算法、网络流最大流也不难,会dfs都可以学!

你还可以去DP那看看,dfs记忆化加剪枝能完成很多动态规划!

这还不止,会递归就可以写归并排序,你掌握了sorting。


你会求逆序对。

你会分治。

你会CDQ分治。

你会整体二分。

你会KDtree你会exgcd,你会欧拉反演你会莫比乌斯反演。

…………

Terrell

会写递归容易,会把实际问题建模成递归问题才是能力。实际工作中总会看到一个复杂的问题被大佬搞成惊艳的递归。

扬扬

多年以前的公司,年末会有一项小活动,大家一起实现一小段程序,看谁效率最高。


第一年搞的是输出100内质数,一个来实习的小姑娘独占鳌头。一看代码直接手动输出,确实效率最高。


第二年总监学聪明了,搞了个兔子繁殖(1,1,2,3,5...),输出第几万个。像我这种用递归实现的菜鸡直接没有运行的机会,。

南山烟雨珠江潮

会写递归刚入门,不会写递归的不能称之为程序员。


但是如果能将任意循环改成递归、且能将任意递归改成循环,应该可以超越30%以上的程序员。

karlestira

不好说,看问题。

有一些东西,人家哼哧哼哧写一长串循环逻辑,你写了一个看似很优美的递归。

上线以后人家的运行正常,你的爆栈。


现实中并没有那么多只能靠递归来解的问题,但现实中有很多商业应用逻辑要求你能够适应任意大小的输入,不得因为输入规模变化导致程序崩溃(有些人对咱这里说的规模不是很清楚,我就这么说吧,匿名页100G起步,IO总量T级别起步,P级别也算正常)。在我的观念里除开一些特殊场合(比如遍历文件系统,目录深度100层已经很了不起了,层数过多文件系统就先报警了),递归真的只能写玩具。


另外,哥们,像我做高性能计算,AVX这种SIMD指令几乎是必须使用的。递归方便使用SIMD指令吗?写到CUDA那边还舒服吗?以后的维护人员会不会想请你吃大嘴巴?


真正对性能要求特别高的东西、瓶颈已经到访存带宽、L3延迟的,我就没见过一定要递归处理的,99%以上都是SIMD的思路。至于性能没啥要求的,应付应付网卡那点撑死16GB每秒速度、延迟微秒起步的东西,你爱咋写咋写。


我还是那句话,如果一个实际问题你第一反应就是想递归(比如说文件系统遍历),那就递归,如果你第一反应不是递归,并且不用递归也可以很舒服的写出代码,那递归就毛用没有,对这种问题强行递归我只能说回字确实有很多种写法。

<END>

推荐阅读:

史无前例:向来封闭的苹果开源了!

注解方式优雅的实现 Redisson 分布式锁

   
   
互联网初中高级大厂面试题(9个G)

内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!

戳阅读原文领取!                                  朕已阅 

浏览 942
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报