C 语言递归

递归是根据自身来定义某物的过程。

一个物理世界的例子就是放置两面平行相对的镜子。它们之间的任何物体都会被递归地反射。

在C语言中,我们知道一个函数可以调用其他函数。函数调用自身也是可能的。这些类型的构造被称为递归函数。


递归如何工作?

void recurse()
{
    ... .. ...
    recurse();
    ... .. ...
}

int main()
{
    ... .. ...
    recurse();
    ... .. ...
}
How recursion works in C programming?
递归的工作原理

递归将继续,直到满足某个条件以阻止它。

为了防止无限递归,可以使用if...else语句(或类似方法),其中一个分支进行递归调用,而另一个分支不进行。


示例:使用递归查找自然数之和

#include <stdio.h>
int sum(int n);

int main() {
    int number, result;

    printf("Enter a positive integer: ");
    scanf("%d", &number);

    result = sum(number);

    printf("sum = %d", result);
    return 0;
}

int sum(int n) {
    if (n != 0)
        // sum() function calls itself
        return n + sum(n-1); 
    else
        return n;
}

输出

Enter a positive integer:3
sum = 6

最初,sum()函数是从main()函数调用的,并将number作为参数传递。

假设sum()中的n的初始值为3。在下一次函数调用期间,将2传递给sum()函数。此过程将持续到n等于0。

n等于0时,if条件失败,然后执行else部分,最终将整数之和返回给main()函数。

Calculation of sum of natural number using recursion
自然数之和

递归的优点和缺点

递归使程序更加优雅。但是,如果性能至关重要,请改用循环,因为递归通常慢得多。

话虽如此,递归是一个重要的概念。它经常用于数据结构和算法。例如,在树遍历等问题中通常会使用递归。

在我们结束之前,让我们来测试一下您对C语言递归的掌握程度!您能解决以下挑战吗?

挑战

编写一个函数来计算一个数字的阶乘。

  • 非负整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。
  • 例如,3 的阶乘是 3 * 2 * 1 = 6
  • 返回输入数字 num 的阶乘。

视频:C 递归

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战