数据结构与算法分析笔记(4)——递归

简单来说,递归(recursion)就是程序简单调用自身的技巧一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

调用自身的方法为递归方法(recursive method)。这个调用就称为递归调用(recursive call 或 recursive invocation)。

设计成功递归的准则:

1.方法必须被赋予一个输入值,通常以实参的形式,有时候也以读入值的形式;

2.方法的定义必须包括这样的逻辑,方法必须以这个输入值作为导致不同情况的参数。这样的逻辑一般包括一个if语句或switch语句。

3.其中一个或多个情况应该具有无需递归的解,这些情况为基本情况或终止情况(stopping cases);

4.其中一个或多个情况必须包含对方法的递归调用。这些递归调用在某种意义上应该通过使用“更小”的实参或者解决该方法所要执行的任务的“更小”版本,向某个基本情况前进一步

/**Task:从一个给定的正整数开始倒计数
* @param integer  大于0的整数*/
public static void countDown(int integer){
    System.out.println(ingeger);
    if(integer>1)
          countDown(integer-1);
}

活动记录栈:对一个方法的每次调用都会产生一个活动记录放进栈里,该记录保存了方法的执行状态。通常,递归方法要比迭代方法用到更多的内存,因为每一次递归调用都会产生一个活动记录。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值