对递归进行分析一下

其实以前都特别的不理解递归,看到别人在解决复杂问题时,总是通过几行代码就解决了,心理很纳闷。

最后分析了一下递归代码,才知道了递归的奥妙所在。下面我写一个程序来分析一下。

int sum(n)

{

   if(1==n)

     return 1;

  else 

    return sum(n-1)+n;

}

这个函数是求1+2+3+....+n的和,当n=3时,会返回sum(2)+3,那实际上sum(2)+3=sum(1)+2+3=1+2+3=6;

那这就是这个程序的执行过程,在计算机中会通过return 语句将函数的结果返回给这个函数,所以才有了我们递归的实现。

实际上我们分析的过程也就是计算机一步一步的做的过程,我们使用递归函数写代码可以使函数代码看起来很简单,但也确实需要我们理解,只有我们理解了一个问题是怎样的,我们才能设计出递归函数,从上面的代码可以看出,要写递归函数必须要有一个出口,就比如是我们上面的n=1时,这个函数的值是1.

递归是通过调用它自身来解决问题的,也就是它自己,即一个函数。所以这个过程需要在栈上开辟大量的空间,当n的值较小时还好,若大,则会早造成我们的栈溢出,即栈的内存空间不够用了。这也是递归的缺陷。

所以综上,递归会使代码量减少,减少编写人员的负担,但同时也会加重栈内存。当n较小时,它和一般函数的效率基本相差不大,但当n很大时,递归的效率则会非常低。



   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值