递归剖析

来源:互联网 发布:修改苹果手机型号软件 编辑:程序博客网 时间:2024/06/03 18:18

      C语言的函数调用可以在main()函数中进行,也可以它本身调用自己,这种调用方式就是递归。先看段代码:

void up_and_down(int);int main(void){    up_and_down(1);//被调函数    return 0;}void up_and_down(int n){    printf("Level %d: n 的地址 %p\n", n, &n); /* #1 */     if (n < 4)         up_and_down(n+1);//递归调用    printf("LEVEL %d: n 的地址 %p\n", n, &n); /* #2 */  }
/* 递归:送出去,返回来 */

      所谓递归,顾名思义就是送出去(递),返回来(归),上面递归调用过程中:#1是完成“递”的过程,即从第一层执行到第四层,打印出:

printf("Level %d: n 的地址 %p\n", n, &n); /* #1 */ 

然后#2是完成了“归”的过程,即从第四层返回第一层,也就是说要返回到n=1的初始值,因为调用函数的初始值本来就是1。打印出:

printf("LEVEL %d: n 的地址 %p\n", n, &n); /* #2 */  
在调用过程中n的值从1一直变到4,然后又从4变到1。总的来说就是位于递归调用前的语句顺序执行,位于递归调用函数之后的语句逆向执行递归调用之前的语句。至此,整个递归调用的过程就结束了。值得注意的是变量n其实是代表了四个不同的变量,其地址在发生着变化,这点从打印出来n的地址就可以看出。

      递归调用的类似于循环的作用,它的好处是省去循环的麻烦,但可以实现循环的功能。
      附打印结果如下:


0 0
原创粉丝点击