2024年10月17日 13:35

This commit is contained in:
许大仙 2024-10-17 05:35:53 +00:00
parent 8b24f228f1
commit b8580e6c75

View File

@ -772,14 +772,14 @@ int main() {
> [!CAUTION] > [!CAUTION]
> >
> * ① 递归体(体现`递`的过程): > * ① `递归体`(体现`递`的过程):
> * 函数内部递归调用自身的部分。 > * 函数内部递归调用自身的部分。
> * 递归体式递归思维的核心:它表示如何将一个大规模的问题`递推`为较小的、相似的子问题。这一分解过程持续的缩小问题的规模,以便更加方便和容易的处理问题。 > * 递归体式递归思维的核心:它表示如何将一个大规模的问题`递推`为较小的、相似的子问题。这一分解过程持续的缩小问题的规模,以便更加方便和容易的处理问题。
> * ② 递归的出口(体现`归`的过程): > * ② `递归的出口`(体现`归`的过程):
> * 当子问题已经足够小或者满足某种条件的时候,我们就不再继续分解,而是开始返回答案。其中,这些条件或某种条件就是递归的出口。 > * 当子问题已经足够小或者满足某种条件的时候,我们就不再继续分解,而是开始返回答案。其中,这些条件或某种条件就是递归的出口。
> * 明确的递归出口是至关重要的。如果没有明确的出口,递归将可能无限进行(类似于死循环),直到耗尽资源并导致栈溢出。通过递归的出口,我们实现从`递`到`归`的转换,并开始逐步合并或组合子问题的答案。 > * 明确的递归出口是至关重要的。如果没有明确的出口,递归将可能无限进行(类似于死循环),直到耗尽资源并导致栈溢出。通过递归的出口,我们实现从`递`到`归`的转换,并开始逐步合并或组合子问题的答案。
> >
> * ③ 递归的深度: > * ③ `递归的深度`
> * 每次递归调用都会加深调用的层次,这可以被看作是递归中`递`的深度。 > * 每次递归调用都会加深调用的层次,这可以被看作是递归中`递`的深度。
> * 控制递归深度是至关重要的。因为一个过深的递归不仅会增加计算的复杂性,还可能会导致栈溢出。合理的深度能够确保我们在`递`的过程中不会过分深入,同时在`归`的过程中能够有效的返回和组合答案。 > * 控制递归深度是至关重要的。因为一个过深的递归不仅会增加计算的复杂性,还可能会导致栈溢出。合理的深度能够确保我们在`递`的过程中不会过分深入,同时在`归`的过程中能够有效的返回和组合答案。
@ -829,13 +829,13 @@ int main() {
* @param n * @param n
* @return * @return
*/ */
int sum(int n) { int sum(int n) { // n 就是递归的深度
// 当 n == 1 的时候,返回 1 // 当 n == 1 的时候,返回 1
if (n == 1) { if (n == 1) { // 递归出口
return 1; return 1;
} }
// 递归情况:将 n 和 n - 1 的和相加 // 递归情况:将 n 和 n - 1 的和相加
return n + sum(n - 1); return n + sum(n - 1); // 递归体
} }
int main() { int main() {