如何写递归函数

一、递归的意思是函数自己调用自身(直接方式),或者在自己函数调用的下级函数中又调用自己(间接方式)。

       递归可拆分为递和归两个过程,递就是向下层传递参数,归是指当函数不再向下传递时会一层一层的返回。

二、写递归函数需考虑的要素:

       a.怎样取一个变量或多个往下递归(不是绝对,但是推荐这么做,变量在传递中要有变化)。

       b.怎样终止递归,要设置一个合理的终止条件(原来的规律不能成立,函数体递归前的代码不再能重复)。

       c.递归过程中的暂时或中间结果怎样保存(不是每一个递归都需考虑这个情况)。

       注:递归函数没有限制函数体里可以调用多少次自身,但是物理硬件决定了它还是会有一个极限,尽量不要超过26万次(UNIX)。

例:

#include <stdio.h>

int sum(int n,int tmp)
{  //递-----------------------
   if(1>n)//!!! 1.这是考虑到递归函数的终止条件
   {
      printf("\n"); 
      return tmp;
   }
   tmp+=n;//!!! 3.累加的中间结果传递的作用。
   int m=n; 
   printf("+%d",n);
   int ret=sum(--n,tmp);//!!! 2.递归的过程应该伴随至少一个参数的变动
   //归-----------------------
   printf("+%d ",m);//同样的语句放的位置不同,输出时的顺序会有变化
   printf("sum(%d,%d)返回...\n",n,tmp);
   return ret;
}

int main()
{
   int n=10;
   printf("累加结果:%d\n",sum(n,0));
}


三、递归思维(怎样用递归解决复杂的有规律可寻的这样的一些问题):

       A.找到一个解决有规律问题方案的一个典型环节(层面), 只考虑这一个环节(层面)的代码应该如何实现.

       B.在这个环节(层面)里又只需考虑:

              a.参数变量如何设置,如何变化传递。

              b.终止条件语句如何写, 也就是不再遵守典型规律的那些情况如何变成代码上的终止条件。

              c.仔细调整一下需输出的文字信息(放在递在过程和归的过程的情况,不要出现重复打印的情况)。

结论: 递归思维本质特点是暂时忽略各个层次实现的不同细节,而只需关注固定的某一环节的较大的过程实现即可.(有规律性的,例外情况不会太多的问题,适合用递归来实现)。
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值