c语言函数原型举例说明,用C语言举例解释函数原型,函数定义和函数调用的关系...

2015-04-25 回答

先说工作原理: 首先要清楚,递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。说白了,还是函数调用。既然是函数调用,那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本,各自为调用者服务,而不受其他函数的影响。 你的ff函数,递归多少次,就有多少个副本,再利用内存的栈式管理,反向退出。这个最好找一下“栈”这方面的东西看看,挺容易的,就像子弹匣一样,先进后出。 你不理解,很有可能是因为误以为该这几行代码被反复使用了。从某种意义上说,这是不对的,因为就像刚才说的,一旦被调用,他将在内存中复制出一份代码,再被调用就再复制一份,换句话说,你可以吧同一个函数的多次调用理解称谓多个不同函数的一次调用,这样也会会简单些。 再说=1和=0是为什么退出。递归,很需要注意的就是死递归,也就是说,某一个函数进入了无限调用自身的情况,永无止境地消耗内存等资源,这在编程方面是一大忌。但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码,否则必定死递归。ff函数中,那个else就是返回的出口,你可以这样想,如果没有那个if来进行判断,你递归到什么时候算完?ff是不是会一直调用自己呢?别指望被调用的函数会自动结束,因为一旦某个函数a中调用了函数b(或者自己),那么a中的代码会停在调用的位置,而转向b中去执行,同理,如果b又调用函数c,那么b又停在调用的位置,去执行c,如果无限调用,那么程序是永远不会结束的。当然,也有这种情况,a调用b,然后继续自己的代码,不管b的死活,这种不在我们的讨论范围内,因为那牵扯到另一种编程方式:多线程。(我们现在说的是单线程) 给你拆极不看看吧: 求3!=? 一层执行到f=ff(3-1)*3;停止,执行二层ff(3-1),也就是ff(2) 二层执行到f=ff(2-1)*2;停止,执行三层ff(2-1),也就是f(1) 三层执行到else if(n==0||n==1) f=1;然后return(f)到二层的ff(2-1)的位置,二层继续执行 二层执行f=1*2; 然后就return(f)到一层ff(3-1)的位置,一层继续执行 一层执行f=2*3; 然后就return(f)到了最初调用ff(3)的main函数里,所以就得到y=6 大体过程就是这样的 这里每次一层都相当于一个不同的函数,你可以给他们起名为ff1,ff2,ff3.....这样就不混了。只要注意一点,调用一次,不是在代码本身上执行,而是会复制出一份在执行,虽然不太恰当,但足以说明问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值