To Iterate is human, to recurse, divine.
递回真的有点难懂,
虽然效率较低,
常常stack overflow,
不过一些程式码硬要写成循环,
似乎可读性会降低。
大家觉得递回是很吃天份的东西吗,
怎样的锻炼方式能够让使用递回得心应手?
小弟是个费式数列都写不出来的递回白痴,
有请大大分享心得。
或是建议不要写递回这种鬼东西?
作者: yotsuba1022 (Carl) 2016-08-20 19:42:00
Then I think you should be a human.
作者: profiles (pforileS) 2016-08-20 19:44:00
想练递回,可用LISP语言
作者:
Eleina (艾琳娜)
2016-08-20 19:56:00递回就像金门沙堆中的炸弹 炸死无辜接手的后人
作者: manaup 2016-08-20 19:58:00
递回很基本好嘛 有些程式叫我改写成循环版本我还要想一下
之前再看Functional programming in scala就是强制要你练习不要用循环 习惯了就好
作者:
testPtt (测试)
2016-08-20 20:04:00还有goto可以用
作者:
O187 (187cm)
2016-08-20 20:12:00没人用? findcontrol表示
作者:
drajan (EasoN)
2016-08-20 20:25:00写题目 例如leet code 试着用递回去解
作者:
kyleJ (资工人)
2016-08-20 20:45:00确定深度不会太深的时候递回很好用啊
作者:
johnny94 (32767)
2016-08-20 21:03:00毕业许久,我到河内塔还是搞不懂…
作者: SoftMen (软男) 2016-08-20 21:06:00
哪里没人用? 只是你刚好用不到吧
作者:
yyc1217 (somo)
2016-08-20 21:31:00的确很久没用过递回了 循环的可读性比较高
写个 merge 跟 quick sort 循环版来看看就好,写死你..
作者:
pttworld (批踢踢世界)
2016-08-20 21:44:00开发速度的差别。
费式数的递回都写不出来,那算法,计算理论都 bye 了.简单的递回并不难学会,方法如下:
作者:
johnny94 (32767)
2016-08-20 21:59:00f(a){if(a == 0) return else f(--a)}
作者: shaform (Shaform) 2016-08-20 22:04:00
嫩嫩我循环,大大你递回
作者:
CoNsTaR ((const *))
2016-08-20 23:29:00去玩玩看函数式语言 只有递回能用 XDD递回和迭代的适用时机不同啊 不能这样比较
作者:
yyc1217 (somo)
2016-08-20 23:38:00sort都有现成的可以用 几乎没写过
作者: Keade0325 (pinpin) 2016-08-21 00:09:00
爬未知的组织树层级资料还不错
作者:
drm343 (一卡)
2016-08-21 00:15:00看语言,多数语言不适合用递回的方式思考
作者:
typepeter (∵Peter∴笑点)
2016-08-21 00:20:00实务上 函数式语言很常用的递回难是因为终止及判断式不容易 没想清楚可能爆炸
作者: dnabossking (少狂) 2016-08-21 00:31:00
递回只该天上有,凡人该当用循环
作者:
descent (“雄辩是银,沉默是金”)
2016-08-21 01:00:00C程序设计的抽象思维,后半段都在教递回
用递回很容易stack overflow吧 至少要用循环+stack解决
作者:
descent (“雄辩是银,沉默是金”)
2016-08-21 01:01:00递回是值得投资的程式技巧
作者:
wuliou (wuliou)
2016-08-21 01:23:00通常我可以用循环就不会用递回 就算自己懂后人难改啊
作者: TTben (TTben) 2016-08-21 01:36:00
实务上没人用递回,认同+1
递回的可读性比较高吧??Recursion:Readability conciseness maintainabilityIteration:Performance and avoid stack overflow
作者:
Eleina (艾琳娜)
2016-08-21 02:35:00老外说的是否有加分我不知道 我只知道离散数学里的题干很容易理解 最终得出的递回关系乍看很难懂
作者: TETZ (你今天宅了吗?) 2016-08-21 07:18:00
写久就有sense了我以前也觉得很苦手但工作久了就觉得还好但我也只有非要递回不可时才用可以用循环就用循环
作者:
bigpigbigpig (To littlepig with love)
2016-08-21 09:21:00以前都没人告诉我递回很难,一不小心就学会了,拍谢
作者: jimwayne123 (曼陀罗) 2016-08-21 09:43:00
递回可读性较高吧 +1...
作者: storyn26383 (贩卖机) 2016-08-21 11:08:00
有些东西用递回写超简单啊,例如树的走访
"顶多" 而且循环还有stack会满的风险而且那个顶多是能最佳化状况讲错 递回有会满的风险编译器会最佳化循环 实际上效能是天差地远所以我说顶多跟循环一样 唯一例外是tail recurrsion除非你每个都写成tail recurrsion
看状况 有些状况真的递回比较适合 也没必要都写成循环
作者:
GlinX (...无尽的终点...)
2016-08-21 14:31:00递回的确是比较好读的 而且有时候循环内的逻辑要做成可于子类别扩充时比较困难 就跟Stream API一样一整坨在那里前面k大贴的连结的第二篇回文也说了 I love recursion 但不适合用在没有为递回tune过的程式语言上 例如Java
作者: RapidGrowth (Jasper) 2016-08-21 16:53:00
In order to understand recursion, one must firstunderstand recursion我想递回应该是开发起来很爽,写完base cases就等于写完整个程式了。开发速度快,成本低,效能之后再优化就好。
作者:
jackyu (孙权)
2016-08-21 17:34:00然后效能优化的最终版本就是写成循环
作者:
aoc5000 (香蕉)
2016-08-21 18:01:00看一些ACM题目 强迫自己用递回写
我反而觉得递回比较好懂耶 可读性高+1..表达又powerful
作者:
LaPass (LaPass)
2016-08-21 22:11:00为什么看推文会觉得递回好像很难的感觉..... 明明递回可以很优雅的干掉很多麻烦的问题啊....
作者: RapidGrowth (Jasper) 2016-08-21 22:34:00
我想大概是很多人根本不懂递回吧。我的话还被乱总结
作者:
konanno1 (konanno1)
2016-08-21 23:05:00console.log((fac=(n,T)=>n==0?T:fac(n-1,n*T))(3,1));学递回顺便学JavaScript好了,stack overfollow免惊。
作者:
alog (A肉哥)
2016-08-22 01:48:00因为很久以前有些前辈认为递回很危险 所以很多技术分享都会讲的很恐怖这样实际上说穿了就是对递回的掌握跟开发经验不足所以才会有这种奇怪的都市传说冒出来都快跟机房放乖乖的传说差不多了怕stack overflow 那测试跟抑制的部分要写好现实的状况也没那么多时间让你纠结要用循环还是递回
作者:
yenru (戴菲娜)
2016-08-22 08:14:00有些程式不用递回无法解啊…
作者:
feeya (24 August 升格为乡民)
2016-08-22 11:31:00扫资料夹档案的功能就可以用递回
理论上所有recursive可以用loop+stack/queue替代更何况stack size会随着你delopy的环境大小会有差这就是为什么实作上鲜少有人用recursive的原因
tail recuesion 也是要 compiler 优化虽然那是满基本的优化 但怎么确定你的编译器一定有
作者:
louner (louner)
2016-08-24 19:36:00leetcode上所有跟tree有关的题目都刷过一遍,你就会得了不用递回就会死的病了