C 程序中的任何函数都可以以递归方式调用;也就是说,函数可以调用自己。 递归调用的数量受堆栈的大小的限制。 若要了解设置堆栈大小的链接器选项,请参阅 /STACK
(堆栈分配)链接器选项。 每次调用函数时,都会为参数以及 auto
和 register
变量分配新存储,这样它们在以前未完成的调用中的值就不会被覆盖。 只有从中创建参数的函数的实例才能直接访问该参数。 前面的参数对函数的后续实例不可直接访问。
请注意,使用 static
存储声明的变量在每次递归调用时不需要新存储。 它们的存储在程序的生存期内存在。 每次引用此类变量时都将访问相同的存储区域。
示例
本示例演示了递归调用:
int factorial( int num ); /* Function prototype */
int main()
{
int result, number;
.
.
.
result = factorial( number );
}
int factorial( int num ) /* Function definition */
{
.
.
.
if ( ( num > 0 ) || ( num <= 10 ) )
return( num * factorial( num - 1 ) );
}