递归剖析

      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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值