黑马程序员技术交流社区

标题: 循环语句与递归 [打印本页]

作者: huangxuanheng    时间: 2014-8-7 22:16
标题: 循环语句与递归
循环语句for、while、do{}while和递归都可以做到循环,那么,大家喜欢用哪种循环呢?

作者: fantacyleo    时间: 2014-8-7 22:34
for、while、do{}while之间,C++之父推荐for,认为它清晰,能用则尽量用。不过我觉得见仁见智,因人而异。递归已经超出了循环的范畴,是计算机科学中非常非常非常重要的一种思想,大量算法问题用递归可以有非常清晰、简洁、直观的表示(执行效率另说,因为涉及优化)。但是,非函数式编程语言(如C/C++/Java/C#/Objective-C等常见的主流语言)通常对递归没有很好的优化,递归超过一定深度就栈溢出
作者: 刘小记.    时间: 2014-8-7 22:46
我喜欢用for
作者: huangxuanheng    时间: 2014-8-7 22:51
fantacyleo 发表于 2014-8-7 22:34
for、while、do{}while之间,C++之父推荐for,认为它清晰,能用则尽量用。不过我觉得见仁见智,因人而异。 ...

想必是忘了限定条件才会有栈溢出的吧?
作者: fantacyleo    时间: 2014-8-7 23:01
huangxuanheng 发表于 2014-8-7 22:51
想必是忘了限定条件才会有栈溢出的吧?

不一定啊,你试试用递归算1到n的和,n到6500左右就会溢出,如果你用long表示结果,那么到5750就会挂掉。但如果经过优化,这个递归是可以转为普通的循环,那就不会栈溢出了
作者: lijiang    时间: 2014-8-7 23:07
个人喜好上喜欢while
作者: inception    时间: 2014-8-7 23:10
喜欢用for
作者: huangxuanheng    时间: 2014-8-8 21:08
fantacyleo 发表于 2014-8-7 23:01
不一定啊,你试试用递归算1到n的和,n到6500左右就会溢出,如果你用long表示结果,那么到5750就会挂掉。 ...

这样啊,我到没有仔细研究,谢谢哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2