在 C 语言编程中,递归意味着一个函数调用其自身。这种编程语言引入了一种名为递归的新技术,以实现简洁优雅的编码。
本文将通过一个实际示例,向您展示如何使用 C 语言编程中的递归来编写程序。让我们用一个众所周知的简单例子——阶乘,来理解递归。
5! = 5 * 4 * 3 * 2 * 1
我们可以使用以下公式计算任何给定数字的阶乘。
n! = (n) * (n-1) * (n-2) * ..... * 1
在 C 语言编程中,我们可以通过多种方式实现输出,例如使用 For 循环、While 循环等。但如果您观察上述模式,会发现它是一种重复行为,这意味着该程序适合使用递归。因此,我们可以使用 C 语言的递归来编写函数,而不是编写循环。
long Calculate_Factorial(int Num)
{
if (Num == 0 || Num == 1)
return 1;
else
return Num * Calculate_Factorial (Num -1);
}
当我们从 main() 函数调用递归函数时,如果给定的数字是 0 或 1,函数将返回 1;否则,它将进行递归调用并返回结果。
Number*Calculate_Factorial(Num -1);
让我们计算 5!
5! = Num*Calculate_Factorial (Num-1);
= 5 * Calculate_Factorial (4) //(5 – 1) 调用上述函数
= 5 * 4 * Calculate_Factorial (3) //(4 -1)
= 5 * 4 * 3 * Calculate_Factorial (2) // (3 -1)
= 5 * 4 * 3 * 2 * Calculate_Factorial (1) //(2 -1)
= 5 * 4 * 3 * 2 * 1
= 120
C 语言使用递归求级数 1²+2²+3²+…..+n² 的和
该程序允许用户输入 N 的值。然后,程序将使用递归或递归函数来计算该级数的和。
#include <stdio.h>
int Sum_Of_Series(int);
int main()
{
int Number, Sum;
printf("\nPlease Enter any positive integer \n");
scanf("%d",&Number);
Sum=Sum_Of_Series(Number);
printf("\nSum of the Series = %d",Sum);
}
int Sum_Of_Series(int Number)
{
if(Number == 0)
return 0;
else
return (Number*Number) + Sum_Of_Series(Number-1);
}

在这个递归示例中,程序的第一行是用户定义函数的声明。在 C 语言编程的 main() 函数中,我们声明了 2 个整型变量。
接下来的 printf 语句将要求用户输入任意整数值。下面的 scanf 语句会将用户输入的整数值赋给名为 Number 的变量。
在下一行中,我们调用了用户定义的函数 Sum_Of_Series(),并将其结果赋给整型变量 Sum。当编译器遇到函数调用时,它会跳转到函数定义处进行计算。
递归函数定义
在 Sum_Of_Series (Number) 函数内部,我们使用了递归。如果用户输入的数字是 0,函数将返回 0。否则,它将返回一个值。这在 C 语言编程中被称为函数递归。
(Number*Number) + Sum_Of_Series (Number-1);
让我们分解上述递归表达式以便更好地理解
(Number * Number) = 数字自乘
Sum_Of_Series(Number-1) = 以减 1 后的数字再次调用同一函数。
在本示例程序中,用户输入的值是 5
递归 1: Number = 5, 大于 0
Sum = (5 * 5) + Sum_Of_Series (5 – 1)
Sum = 25 + Sum_Of_Series (4)
第 2 次: Number = 4, 大于 0, 此时 Sum 是 25
Sum = (4 * 4) + Sum_Of_Series (4 – 1)
Sum = 16 + Sum_Of_Series (3)
此时 Sum 的值为: 25 + 16 = 41
C 语言递归示例的第 3 次迭代: Number = 3, 大于 0, 此时 Sum 是 41
Sum = (3 * 3) + Sum_Of_Series (3 – 1)
Sum = 9 + Sum_Of_Series (2) => 41 + 9 = 50
第 4 次: Number = 2, 大于 0, 此时 Sum 是 50
Sum = (2 * 2) + Sum_Of_Series (2 – 1)
Sum = 4 + 50 = 54
第 5 轮递归迭代: Number = 1, 大于 0, 此时 Sum 是 54
Sum = (1 * 1) + Sum_Of_Series (1 – 1) => 1 + Sum_Of_Series (0)
此时 Sum 的值为: 54 + 1 = 55
第 6 次轮转: Number = 0, 这意味着第一个 if 条件为真,因此将退出递归。最终值为 55
这个 C 语言递归程序的最终输出 = 55。我们必须使用某种条件来退出递归函数调用。如果忘记了条件,函数将无限次执行。请参考 For 循环和 While 循环的文章。