|
楼主 |
发表于 2017-7-9 22:49:10
|
显示全部楼层
本帖最后由 威斯布鲁特 于 2017-7-11 14:48 编辑
递归(recurison):c允许函数调用自己,这种调用方式成为递归(recurison)。
示例程序:
- #include <stdio.h>
- #include <stdlib.h>
- void up_and_down(int n);
- int main(void)
- {
- up_and_down(1);
- return 0;
- }
- void up_and_down(int n)
- {
- printf("Level %d: n location %p\n", n, &n); //#1
- if (n<4)
- up_and_down(n+1);
- printf("Level %d: n location %p\n", n, &n); //#2
- }
复制代码
Windows10输出结果如下:
首先mian()调用了带参数1的up_and_down(),执行结果是up_and_down()中的形式参数n的值是1,所以打印#1 打印Level 1。由于n<4,up_and_down()(第一级)调用实际参数为n+1(或2)的up_and_down()(第2级)。于是第二级调用中n的值是2,打印语句#1 打印级别2.
当执行到第四级时,up_and_down()函数不再调用自己。第4级调用接着执行打印语句#2,即打印LEVEL 4,因为n的值是4.此时,第4级调用结束,控制被传回它的主调函数(即第3级调用)。在第3级调用中,执行的最后一条语句是调用if语句的第4级调用。被调函数(即第4级调用)把控制返回在这个位置,因此,第3级调用继续执行后面的代码,打印语句#2 打印LEVEL 3.
从程序输出的地址值可以看出,每级递归的变量n都属于本级递归所有。 |
|