调用自身的函数称为递归函数。并且,这种技术称为递归。
递归如何工作?
void recurse()
{
... .. ...
recurse();
... .. ...
}
int main()
{
... .. ...
recurse();
... .. ...
}
递归继续进行,直到满足某些条件以防止递归为止。
为了防止无限递归,可以在一个分支进行递归调用而其他分支不进行递归调用的情况下使用if … else语句(或类似方法)。
示例:使用递归的自然数之和
#include
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
最初,使用数字作为参数从main()
函数调用sum()
。
假设sum()
的n初始值为3。在下一个函数调用期间,将2传递给sum()
函数。此过程一直持续到n等于0。
当n等于0时, if
条件失败,执行else
部分,将整数之和最终返回给main()
函数。
递归的优缺点
递归使程序优雅。但是,如果性能至关重要,请使用循环代替,因为递归通常要慢得多。
话虽如此,递归是一个重要的概念。它经常用于数据结构和算法中。例如,在诸如树遍历之类的问题中通常使用递归。