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

共 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......等技术栈!

戳阅读原文领取!                                  朕已阅 




浏览 970
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报