递归函数怎么写( 二 )


static int sn;
sn+=num;
if(num==100) return sn;
add(++num);
}
分析一下程序:前调用add(1) , 然后在子函数中把这个1加到sn上面 。接着调用add(2) , 再把sn加2上来 。这样一直到100 , 到了100的时候 , 先加上来 , 然后发现满足了if条件 , 这时返回sn的值 , 也就是1+2+……+100的值了 。
4.什么是递归函数递归就是一个函数在它的函数体内调用它自身 。执行递归函数将反复调用其自身 , 每调用一次就进入新的一层 。递归函数必须有结束条件 。
当函数在一直递推 , 直到遇到墙后返回 , 这个墙就是结束条件 。
所以递归要有两个要素 , 结束条件与递推关系 。
递归有两个基本要素:
(1)边界条件:确定递归到何时终止 , 也称为递归出口 。
(2)递归模式:大问题是如何分解为小问题的 , 也称为递归体 。递归函数只有具备了这两个要素 , 才能在有限次计算后得出结果
在递归函数中 , 调用函数和被调用函数是同一个函数 , 需要注意的是递归函数的调用层次 , 如果把调用递归函数的主函数称为第0层 , 进入函数后 , 首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层 。反之 , 退出第i+1层调用应该返回第i层 。
一个递归函数的调用过程类似于多个函数的嵌套的调用 , 只不过调用函数和被调用函数是同一个函数 。为了保证递归函数的正确执行 , 系统需设立一个工作栈 。具体地说 , 递归调用的内部执行过程如下:
(1)运动开始时 , 首先为递归调用建立一个工作栈 , 其结构包括值参、局部变量和返回地址;
(2)每次执行递归调用之前 , 把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
(3)每次递归调用结束后 , 将栈顶元
扩展资料:
递归就是某个函数直接或间接地调用了自身 , 这种调用方式叫做递归调用 。说白了 , 还是函数调用 。既然是函数调用 , 那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本 , 各自为调用者服务 , 而不受其他函数的影响 。
你的ff函数 , 递归多少次 , 就有多少个副本 , 再利用内存的栈式管理 , 反向退出 。这个最好找一下“栈”这方面的东西看看 , 挺容易的 , 就像子弹匣一样 , 先进后出 。
从某种意义上说 , 这是不对的 , 因为就像刚才说的 , 一旦被调用 , 他将在内存中复制出一份代码 , 再被调用就再复制一份 , 换句话说 , 你可以吧同一个函数的多次调用理解称谓多个不同函数的一次调用 , 这样也会会简单些 。
再说=1和=0是为什么退出 。递归 , 很需要注意的就是死递归 , 也就是说 , 某一个函数进入了无限调用自身的情况 , 永无止境地消耗内存等资源 , 这在编程方面是一大忌 。
但凡是递归的函数 , 一定会在某一个地方存在能够返回上一层函数的代码 , 否则必定死递归 。ff函数中 , 那个else就是返回的出口 , 你可以这样想 , 如果没有那个if来进行判断 , 你递归到什么时候算完?ff是不是会一直调用自己 。