递归
简单介绍
最直接的就是:递归在一直反复调用自身函数进行解决问题
递归有两个重要概念:
-
递归边界(终止条件):定义递归何时停止,避免无限调用。
-
递归式(递归调用):描述如何将问题分解为更小的子问题,并通过调用自身得到结果。
分治思想
分治法是一种重要的算法思想,它将原问题划分为若干个规模较小但结构与原问题相似的子问题,分别解决这些子问题,最后将子问题的解合并为原问题的解。
递归是实现分治思想的一种常见方式,但分治也可以通过迭代等其他方法实现。
大致步骤:
-
分解:将原问题划分为若干个规模较小、结构相似的子问题。
-
解决:递归地求解子问题;当子问题规模足够小(通常达到递归边界)时,直接求解。
-
合并:将所有子问题的解合并,得到原问题的最终解。
注意事项:
-
子问题之间应相互独立、无交叉,否则可能导致重复计算或逻辑错误。
-
分治法适用于问题具有“可分解性”和“子问题可合并性”的场景。
示例
一、求解:n!(n的阶乘)
问题描述
计算一个非负整数 n 的阶乘,即
例如ÿ