C 语言中的递归

在 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);  
}
Recursion in C Programming

在这个递归示例中,程序的第一行是用户定义函数的声明。在 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 循环的文章。