2010-12-18 23 views
3

我只想知道是否有任何网站在练习递归和OO设计时遇到问题(给定一些设计类/接口结构的实体)?任何网站/书籍/技巧来练习递归和OO设计?

我理解需要递归的问题的解决方案没有任何困难,但我似乎无法将递归应用于新问题。是否有任何技巧来应用递归?我很抱歉,如果这个问题很愚蠢!

+5

要理解递归,您必须先了解递归。 – 2010-12-18 18:51:29

+0

GNU的意思是“GNU Not Unix”在Java中,大多数问题最好使用循环来解决,所以如果你找不到一个好例子就不要感到惊讶。在大多数功能/逻辑编程语言中,递归往往是一种自然的选择。 – 2010-12-18 18:57:27

回答

3

您可能需要查看诸如Project EulerUSACO之类的内容。它们提供了许多从简单到困难的问题,其中许多可以使用递归技术来解决。随着您的进行,您将有机会看到其他人如何解决您尝试的问题。这样你不仅可以学习递归,还可以学习许多其他解决问题的技巧。

+0

感谢您的答复。我会研究它。 – collegian 2010-12-18 18:58:19

+0

另外,有没有哪些地方可以练习面向对象的设计相关问题? – collegian 2010-12-18 19:04:42

+0

由于其编程不像设计那么多,因此OOD有点难以找到这样的网站。除了使用诸如Head First OOD之类的好书以外,我不确定推荐什么。它必须来自尝试各种项目。 – 2010-12-18 19:07:42

0

你遇到了什么问题?我会建议给你一个新的问题,你有另一个机会。如果你无法发挥它的作用,举一个简单的例子说明你有什么和你想做什么,有人可能会看到什么部分让你绊倒。

+0

我试图在模拟棋子移动的电话板上生成独特的7位数字。首先,我如何制作一个高效的面向对象设计来表示所有对象?之后,我没有模拟棋子运动的线索。有这么多的可能性! – collegian 2010-12-18 19:01:17

+0

也许首先尝试一个更简单的例子。 – jzd 2010-12-18 19:03:11

1

尝试http://programmingpraxis.com

它得到了疑问/样品示例递归

例如:写一个递归程序,它从1打印号码10,fibonnaic系列

+0

感谢您的回复。我们将对此进行调查。 – collegian 2010-12-18 19:48:41

+0

@大学生,您的欢迎。 – Deepak 2010-12-18 19:50:51

1

根据我的经验,递归用于更多的数学算法设计,但在更高层次的编程(而OOP通常是更高的层次),使用递归并不总是增加很多。此外,递归过程通常不容易适应,因此如果其中一个需求发生变化,可能会导致您重写整个过程,而在更线性的编程中,您可以更容易地获取某些内容或将其忽略 - 它们的中间步骤不会互相依赖。另外,在(某些?)面向对象的语言中,对于每个递归级别,都会创建一个对象的新实例,这会导致开销。

这是一个很好的技术知道,但根据不同类型的问题,你可能不会在面向对象问题中遇到真正的生活中的使用。除了文件/目录脚本,我基本上已经将大部分酷炫的递归解决方案重写为无聊的线性方案,以达到性能或可维护性的原因。