會(huì)寫遞歸超越了多少程序員?
閱讀本文大概需要 2.8 分鐘。
來自:https://www.zhihu.com/question/589779747

閃耀大叔
好多年前的我,大二,剛學(xué)c語言,啥也不會(huì),只會(huì)遞歸。參加藍(lán)橋杯,就憑這一招,拿了省賽一等獎(jiǎng),國賽二等獎(jiǎng)。我以為自己很強(qiáng),后來發(fā)現(xiàn)是這個(gè)比賽水......
后來做嵌入式,發(fā)現(xiàn)遞歸思路簡單,但開銷極大,經(jīng)常想盡辦法改成非遞歸......
Evan_song
恭喜你!你超越了大部分程序員!
你掌握了遞歸技術(shù),說明你可以寫出dfs!
使用dfs技術(shù),你可以寫二叉搜索樹!
熟練運(yùn)用dfs,你還可以完成線段樹的編寫!
二叉搜索樹再隨便學(xué)學(xué),就是平衡樹,你掌握了FHQ,Splay,Treap,紅黑樹,替罪羊樹,B樹!
線段樹可以拓展到值域線段樹!
同樣的,平衡樹可以拓展到文藝平衡樹!
繼續(xù)就是樹套樹!
Link-Cut-Tree!
往圖論那邊走走,你學(xué)會(huì)了tarjan!
tarjan可以完成割邊割點(diǎn),邊點(diǎn)雙連通分量!
二分圖匈牙利算法、網(wǎng)絡(luò)流最大流也不難,會(huì)dfs都可以學(xué)!
你還可以去DP那看看,dfs記憶化加剪枝能完成很多動(dòng)態(tài)規(guī)劃!
這還不止,會(huì)遞歸就可以寫歸并排序,你掌握了sorting。
你會(huì)求逆序?qū)Α?/span>
你會(huì)分治。
你會(huì)CDQ分治。
你會(huì)整體二分。
你會(huì)KDtree你會(huì)exgcd,你會(huì)歐拉反演你會(huì)莫比烏斯反演。
…………
Terrell
會(huì)寫遞歸容易,會(huì)把實(shí)際問題建模成遞歸問題才是能力。實(shí)際工作中總會(huì)看到一個(gè)復(fù)雜的問題被大佬搞成驚艷的遞歸。
揚(yáng)揚(yáng)
多年以前的公司,年末會(huì)有一項(xiàng)小活動(dòng),大家一起實(shí)現(xiàn)一小段程序,看誰效率最高。
第一年搞的是輸出100內(nèi)質(zhì)數(shù),一個(gè)來實(shí)習(xí)的小姑娘獨(dú)占鰲頭。一看代碼直接手動(dòng)輸出,確實(shí)效率最高。
第二年總監(jiān)學(xué)聰明了,搞了個(gè)兔子繁殖(1,1,2,3,5...),輸出第幾萬個(gè)。像我這種用遞歸實(shí)現(xiàn)的菜雞直接沒有運(yùn)行的機(jī)會(huì),。
南山煙雨珠江潮
會(huì)寫遞歸剛?cè)腴T,不會(huì)寫遞歸的不能稱之為程序員。
但是如果能將任意循環(huán)改成遞歸、且能將任意遞歸改成循環(huán),應(yīng)該可以超越30%以上的程序員。
karlestira
不好說,看問題。
有一些東西,人家哼哧哼哧寫一長串循環(huán)邏輯,你寫了一個(gè)看似很優(yōu)美的遞歸。
上線以后人家的運(yùn)行正常,你的爆棧。
現(xiàn)實(shí)中并沒有那么多只能靠遞歸來解的問題,但現(xiàn)實(shí)中有很多商業(yè)應(yīng)用邏輯要求你能夠適應(yīng)任意大小的輸入,不得因?yàn)檩斎胍?guī)模變化導(dǎo)致程序崩潰(有些人對咱這里說的規(guī)模不是很清楚,我就這么說吧,匿名頁100G起步,IO總量T級別起步,P級別也算正常)。在我的觀念里除開一些特殊場合(比如遍歷文件系統(tǒng),目錄深度100層已經(jīng)很了不起了,層數(shù)過多文件系統(tǒng)就先報(bào)警了),遞歸真的只能寫玩具。
另外,哥們,像我做高性能計(jì)算,AVX這種SIMD指令幾乎是必須使用的。遞歸方便使用SIMD指令嗎?寫到CUDA那邊還舒服嗎?以后的維護(hù)人員會(huì)不會(huì)想請你吃大嘴巴?
真正對性能要求特別高的東西、瓶頸已經(jīng)到訪存帶寬、L3延遲的,我就沒見過一定要遞歸處理的,99%以上都是SIMD的思路。至于性能沒啥要求的,應(yīng)付應(yīng)付網(wǎng)卡那點(diǎn)撐死16GB每秒速度、延遲微秒起步的東西,你愛咋寫咋寫。
我還是那句話,如果一個(gè)實(shí)際問題你第一反應(yīng)就是想遞歸(比如說文件系統(tǒng)遍歷),那就遞歸,如果你第一反應(yīng)不是遞歸,并且不用遞歸也可以很舒服的寫出代碼,那遞歸就毛用沒有,對這種問題強(qiáng)行遞歸我只能說回字確實(shí)有很多種寫法。
推薦閱讀:
注解方式優(yōu)雅的實(shí)現(xiàn) Redisson 分布式鎖
互聯(lián)網(wǎng)初中高級大廠面試題(9個(gè)G) 內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!
?戳閱讀原文領(lǐng)取! 朕已閱

