递归是根据自身来定义某物的过程。
一个物理世界的例子就是放置两面平行相对的镜子。它们之间的任何物体都会被递归地反射。
在C语言中,我们知道一个函数可以调用其他函数。函数调用自身也是可能的。这些类型的构造被称为递归函数。
递归如何工作?
void recurse() { ... .. ... recurse(); ... .. ... } int main() { ... .. ... recurse(); ... .. ... }

递归将继续,直到满足某个条件以阻止它。
为了防止无限递归,可以使用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()
函数。

递归的优点和缺点
递归使程序更加优雅。但是,如果性能至关重要,请改用循环,因为递归通常慢得多。
话虽如此,递归是一个重要的概念。它经常用于数据结构和算法。例如,在树遍历等问题中通常会使用递归。