#include<stdio.h>
void testfunc(int);
int main(void)
{
testfunc(1);
return 0;
}
void testfunc(int n)
{
printf("Lv%d:%p\n",n,&n); //%p 地址显示格式
if(n<4)
{
testfunc(n+1); //testfunc()调用了自己
}
printf("2Lv%d:%p\n",n,&n);
}
以上是一个递归的示例。
testfunc()在内部调用了自己,这样的后果是:暂时不执行最后面的“printf("2Lv%d:%p\n",n,&n);”,而是将 n+1作为参数调用了自己,这样重复,最终程序的结果是:
(根据电脑不同,地址可能有所不同)
程序具体运行步骤:
1.main()调用testfunc(1)
2.testfunc(1)执行,打印“lv1:0022FF60”,0022FF60是n的地址
3.n<4,条件成立, testfunc(1)调用testfunc(2)
4.testfunc(2)执行,打印“lv1:0022FF40”,因为此时testfunc(2)的变量n已经不是testfunc(1)中的变量n了,所以地址不同。(函数的参数作用域只在当前函数)
5.n<4,条件成立,testfunc(2)调用testfunc(3)
6.testfunc(3)执行,打印“lv1:0022FF20”
7.n<4,条件成立,testfunc(3)调用testfunc(4)
8.testfunc(4)执行,打印“lv1:0022FF00”
9.n<4,条件不成立,打印“2lv1:0022FF00”
10.返回调用testfunc(4)的testfunc(3),打印“2lv1:0022FF20”
11.返回调用testfunc(3)的testfunc(2),打印“2lv1:0022FF40”
12.返回调用testfunc(2)的testfunc(1),打印“2lv1:0022FF60”
OK,这就是函数的递归调用,通俗的说就是函数自己调用自己。以前学时没有弄明白,现在终于弄明白了。