C++算法学习-递归

递归

仓库源代码:Github

递归函数

递归函数是一种调用自身的函数。递归函数通常用于解决那些可以分解为相似子问题的问题。递归函数通常包含两个部分:基线条件(递归的终止条件)和递归条件(递归的调用)。

递归实现等差数列求和

  1. 问题描述及分析:

  • 问题描述:给定一个整数n,计算等差数列的第n项。等差数列的定义是:每一项与前一项的差是一个常数,这个常数称为公差。例如,等差数列1, 4, 7, 10, 13, …的公差是3。
  • 分析:在这个等差数列中,第n项可以通过以下公式计算:第n项 = 第(n-1)项 + 3,需要注意的是,在第一项时n = 1同时这也是递归函数的约束条件。因此,我们可以使用递归函数来实现这个计算,即:如果n等于1,返回1;否则,返回find(n-1) + 3
  1. 函数实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int find(int n)
{
int res;
if (n == 1)
{
res = 1;
}
else
{
res = find(n - 1) + 3; // 第n项等于前一项+3
}

return res;
}
  • @brief 求解第n项的值
  • @param n 第n项
  • @return 第n项的值
  1. 函数解析:

1
if (n == 1){}
  • 如果n等于1,那么返回1,这是递归的基线条件,即递归的终止条件。
1
2
3
4
else
{
res = find(n - 1) + 3;
}
  • 如果n不等于1,那么调用find(n - 1)来计算前一项,然后将前一项加上3,得到第n项。这是递归的条件,即递归的调用。
  1. 代码演示(使用:pythontutor.com演示): 代码演示

递归实现等比数列求和

  1. 问题描述及分析:

  • 问题描述:给定一个整数n和一个初始值a,计算等比数列的前n项。等比数列的定义是:每一项是前一项乘以一个常数,这个常数称为公比。例如,等比数列1, 2, 4, 8, 16, …的公比是2。
  • 分析:在这个等比数列中,第n项可以通过以下公式计算:第n项 = 第(n-1)项 * 2,需要注意的是,在第一项时n = 1同时这也是递归函数的约束条件。因此,我们可以使用递归函数来实现这个计算,即:如果n等于1,返回a;否则,返回geometricRatio(n - 1) * 2
  1. 函数实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
    int geometricRatio(int n)
{
int res;
if (n == 1)
{
res = 2;
}
else
{
res = geometricRatio(n - 1) * 2;
}
return res;
}
  • @brief 求解第n项的值
  • @param n 第n项
  • @return 第n项的值
  1. 函数解析:

1
if (n == 1){}
  • 如果n等于1,那么返回2,这是递归的基线条件,即递归的终止条件。
1
2
3
4
else
{
res = geometricRatio(n - 1) * 2;
}
  • 如果n不等于1,那么调用geometricRatio(n - 1)来计算前一项,然后将前一项乘以2,得到第n项。这是递归的条件,即递归的调用。
  1. 代码演示(使用:pythontutor.com演示): 代码演示

递归实现阶乘

  1. 问题描述及分析:

  • 问题描述:给定一个整数n,计算n的阶乘。阶乘的定义是:n! = n * (n-1) * (n-2) * … * 1。例如,5! = 5 * 4 * 3 * 2 * 1 = 120。
  • 分析:在这个问题中,我们可以使用递归函数来实现计算阶乘。递归的基线条件是当n等于1时,返回1。否则,返回factorial(n - 1) * n
  1. 函数实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int factorial(int n)
{
int res;
if (n == 1)
{
res = 1;
}
else
{
res = factorial(n - 1) * n;
}

return res;
}
  • @brief 求解n的阶乘
  • @param n 第n项
  • @return n的阶乘
  1. 函数解析:

1
if (n == 1){}
  • 如果n等于1,那么返回1,这是递归的基线条件,即递归的终止条件。
1
2
3
4
else
{
res = factorial(n - 1) * n;
}
  • 如果n不等于1,那么调用factorial(n - 1)来计算前一项,然后将前一项乘以n,得到n的阶乘。这是递归的条件,即递归的调用。
  1. 代码演示(使用:pythontutor.com演示): 代码演示


C++算法学习-递归
http://ankali-aylina.github.io/2025/07/25/C-算法学习-递归/
作者
Ankali-Aylina
发布于
2025年7月25日
更新于
2025年7月25日
许可协议