函数需要被另一个函数调用才能执行,而主函数main
在程序运行时会被自动调用。
上一节中,我们写了一个名为add
的函数,并且使用主函数来调用它。
我们进一步发散思维,函数内部是否能调用自己呢?
1. 函数递归调用
#include <stdio.h>
void func(int n)
{
printf("%d\n", n);
func(n + 1);
}
int main()
{
func(0);
return 0;
}
编译可以通过,运行依次打印出了0,1,2,3,4,5......
说明在C语言中,在一个函数内部是可以再次调用自己的。这种调用被称之为函数递归
。
我们来分析一下func
函数递归调用的过程。
最初,func
函数在主函数main
中被调用,传入了参数0。进入func
函数后,形参n的值为0,n被printf打印。接下来将n + 1
作为参数传入func
函数,开始自己调用自己。
由于函数func
首尾相接,它将造成程序陷入死循环。就像一条蛇,咬住了自己的尾巴,整个蛇构成了一个环形。
还记得怎样打断程序执行吗?如果你的程序陷入了循环,请使用Ctrl + C
组合键结束程序。
如果你不打断程序执行,那么过不了多久,程序将出现栈溢出异常,导致程序异常结束。我们稍后讨论这个问题出现的原因。