【发布时间】:2011-08-07 15:44:58
【问题描述】:
什么是使用递归的例子(几乎没有解释和/或代码示例)?
【问题讨论】:
标签: recursion
【问题讨论】:
标签: recursion
用途:解析;遍历;生成分形;某些形式的加密
示例:河内塔;斐波那契序列;子集生成(有大量示例,如果您愿意,我可以为您编写其中的一些代码?)
优点:简单;对某些问题很直观(例如 Ackermann 函数、遍历)
缺点:慢(尽管您可以使用堆栈实现任何递归解决方案);可能会导致stackoverflow异常
如果有人对加密有疑问,以下是密码块链接模式的简短说明:
Chaining 为分组密码添加了反馈机制。块是 首先加密,然后将它们的结果反馈到 下一个块的加密。因此,每个块都会修改加密 下一个区块。
在 CBC 中,明文首先被加密,结果存储在一个 反馈寄存器。然后下一个明文与内容进行异或 的寄存器。这成为加密的下一个输入 常规。生成的加密存储在反馈寄存器中 再次与下一个明文进行异或。这个过程重复 直到消息结束。对于解密,一个块被解密 通常并存储在反馈寄存器中 - 在下一个块之后 解密后,它与反馈寄存器的结果进行异或运算 以此类推。
[改编自 Bruce Shneier 的优秀著作,Applied Cryptography]
【讨论】:
任何类型的循环都可以表示为尾递归,它在函数式语言中很常用。显然,构建/处理任何类型的递归数据结构 - 树是一回事,但例如列表也可以递归表示(因为 head 是元素,tail 是其余的 [另一个列表])。
【讨论】:
任何可以迭代解决的问题都可以递归解决。我会质疑所提问题的有效性,因为迭代或递归解决问题主要取决于具体情况。
【讨论】: