递归算法【一些个人理解】

        递归算法,从定义上来说,是一种直接或者间接地调用自身的一种算法,这里的自己可以是函数或者方法。递归算法的思想或者说实质就是把实际的问题分解成规模较小的一个个的子问题,然后不断使用递归调用方法来求得问题的解。要学习和使用递归算法,就要从最基本的定义上来先解读。

【递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。】

        从递归的定义上来看,我们对于那些可以使用递归思想来简化并解决的问题,就相当于是在剥洋葱,将一个大的问题(洋葱)简化成一个一个与原问题相似但是规模更小的子问题(一片洋葱),然后递归调用方法(剥),这样最后得到答案,这样我感觉形容起来就很简单明了了,递归就是在程序运行过程中,在达到自己需要的结果之前不断地自己调用自己,重复重复重复......因此,就可以看出了递归的特点,可以分为以下四点:


1)递归是方法里调用自身;

2)使用递归策略时需要设置一个明确的约束条件,即递归出口;

3)由于递归算法是将一个大的问题简化成类型相似规模较小的子问题,因此在使用递归算法解决问题时coding会显得很简洁,但是从第二点特点就可以知道,这是一个在达到明确的结束条件之前,递归是一直进行的,运行效率较低;

4)接第三点,同理递归在不断的进行的过程中,每进行一次调用,系统就会为每一层额返回点和局部变量开辟栈来存储,随着递归的次数的增加,很容易造成栈溢出。

        从以上的四点来看,递归也并不是一个十分完美的解决方法,使用递归的思想来解决复杂问题的时候能提供一个很清晰可的思路,而且可以提高编程效率缩短程序代码,只是相对于那种巨型的问题,使用递归就像是掉进了一个无底洞一样,只是简化了代码,但是并没有提高程序的执行效率。而且从递归的定义上来看,直接递归函数是不断地调用自己,而间接的递归则是会调用两个或更多的函数,这样对内存的占用是非常大的,因此在使用递归的时候还是尽量要少使用局部变量,减小内存压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值