递归 -众所周知-是其中的一个问题-绕回头就像在编程之旅中取得“里程碑”。
但是,当涉及到在现实世界中实际使用它时-仅了解递归的机制还不够-在递归是最合适的解决方案的同时,还必须了解问题的性质。
所以我的问题是...
- 什么是需要递归解决的“问题模式”
- 是递归形式的“分而治之”策略还是形式的“代码重用”,或者是一种设计模式
- 您能否举一个现实世界中的示例为例,其中想到递归作为直接解决方案
-更新-
许多答案都将“实际问题”称为遍历树,阶乘等。我更喜欢“真正的实际问题”-让我举个例子...
我们有一个大的文本夹(大约30 MB的文本作为的链接列表structs
),我们需要为全文搜索创建一个索引。我们需要将整个索引保留在内存中,然后每10分钟重新为文本建立索引。
每隔10分钟,我们会将整个文本(两个链接列表,逐行)与新生成的文本块进行比较-以查看更改了哪行-然后我们将仅对该行重新索引-这样我们可以避免不必重新索引整个文本。记住-我们需要找到两个30 MB链表之间的差异点。
我的一位同事提出了一个很棒的程序,该程序使用HEAVY递归比较行-然后收集卡盘在阵列中不同的位置-是的,我知道这听起来很令人困惑-递归如何在这里提供帮助-但它做了。
关键是-他怎么看待大量使用递归可以巧妙地解决这个问题?