为什么我不习惯用递归,这方面我应该怎么加强?

2013-05-08 19:53:55 +08:00
 justfly
这个问题很苦恼。

比如说我想计算一个数的阶乘 n! 我首先想到的是用for循环一个一个的乘,根本想不到递归的方法。

当然这只是一个例子,当初学数据结构,二叉树遍历代码很简单,但因为是递归的,就觉得理解不透的感觉,汉诺塔那个递归算法也是记不住。太苦恼了

虽然所有递归理论来说都可以用普通方法代替,但是递归代码清晰易懂的优势也很大,所以请不要说难理解就别深究这样的话。

请各位v2exer解惑,感谢!
16279 次点击
所在节点    程序员
81 条回复
skywalker
2013-05-09 11:08:21 +08:00
用一段Haskell就习惯了,其实更多是一种思维训练,如果找出问题的规律,将其分解为更小规模的问题.
zhujinliang
2013-05-09 11:10:26 +08:00
业余玩单片机的表示没法用递归,内存按字节数,一搞递归要吃多少内存啊
xdeng
2013-05-09 11:14:36 +08:00
递归 很好么??? 小心栈溢出
zhicheng
2013-05-09 11:15:58 +08:00
一句话,学并且用 Clojure 。在类C的语言里,不要使用递归。
justfly
2013-05-09 11:23:57 +08:00
@leiz 经你一说觉得确实是这样,我再温习一遍数学归纳法
justfly
2013-05-09 11:26:14 +08:00
@xavierskip

恩,以后递归的问题从这两点出发去考虑
oldcai
2013-05-09 11:27:28 +08:00
@xdeng 同忧心。
justfly
2013-05-09 11:30:59 +08:00
@zhujinliang 当然单片机这种寸土寸金的地方就不考虑这些啦
skywalker
2013-05-09 11:31:14 +08:00
@xdeng 用尾递归
Mutoo
2013-05-09 11:39:14 +08:00
计算机上的递归实际上就是 栈+循环 而已。
onesuper
2013-05-09 12:20:13 +08:00
skywalker
2013-05-09 12:59:50 +08:00
@onesuper 牛!太好了
Cadina
2013-05-09 13:06:37 +08:00
@zhujinliang 说递归有效率问题的,可以看下尾递归优化
solesschong
2013-05-09 14:08:12 +08:00
@fooCoder 是。我不和你说了,再说没钱了。刚注册
yexiang841
2013-05-09 15:42:17 +08:00
生产环境下谁用递归开除谁,无二话。
zhujinliang
2013-05-09 18:10:02 +08:00
@Cadina 谢谢,明天早上研究一下
kylefeng
2013-05-09 18:36:55 +08:00
去看 《The Little Schemer》 吧。
diligence24
2013-05-09 18:52:42 +08:00
我觉得写递归要想清楚什么时候return。具体的问题你可以debug,不过切记测试数据要简单却不失代表性。不然不会单步到找不着北的。。。
seeker
2013-05-09 20:49:23 +08:00
学一门函数式语言。lisp,ML,haskell自动就会了
tioover
2013-05-10 00:25:42 +08:00
我不太习惯用迭代,这方面我该做什么加强。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/68190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX