C Primer Plus学习 十七 递归

递归

           C允许一个函数调用其本身。这种调用过程被称作递归(recursion)。递归有时很难处理,而有时却很 方便实用。当一个函数调用自己时,如果编程中没有设定可以终止递归的条件检测,它会无限制地进行递 归调用,所以需要进行谨慎处理。

           递归一般可以代替循环语句使用。有些情况下使用循环语句比较好,而有些时候使用递归更有效。递 归方法虽然使程序结构优美,但其执行效率却没有循环语句髙。

/* recur.c —递归举例   P236*/
#include <stdio.h>


void un_and_down(int);


int main(void)
{


un_and_down(1);
return 0;
}


void un_and_down(int n)
{
printf("Level %d: n location %p\n", n,&n);
if (n<4)
{
un_and_down(n+1);
}
printf("Level %d: n location %p\n", n,&n);
}
         当开始执行第4级调用时,n的值是4,因此if语句的条件不满足。这时不再继续调用up_and_down () 函数。第4级调用接着执行打印语句#2,即输出LEVEL 4,因为’n的值是现在函数需要执行return语 句,此时第4级调用结束,把控制返回给该函数的调用函数,也就是第3级调用函数。第3级调用函数中 前一个执行过的语句是在if语句中进行第4级调用。因此,它开始继续执行其后续的代码,即执行打印语 句#2,这将会输出LEVEL 3。当第3级调用结束后,第2级调用函数开始继续执行,即输出了 LEVEL 2。 依此类推。
         注意,每一级的递归都使用它自己私有的变量n。你可以通过查看地址的值来得出这个结论(当然, 不同的系统通常会以不同的格式显示不同的地址。关键点在于,调用时的Levell地址和返回时的Levell 地址是相同的)。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值