赞
踩
本人是一个小白,本文是自己在学习递归的过程中通过参考大神的文章并结合自己的一些见解完成的,过程中可能有某些地方有所偏差, 请各位批评指正…
所谓递归,简单来说就是自己调用自己,当满足某个条件时停止调用。递归体现的是一种解决问题思路、解决问题的一个过程,递归由递归头和递归体两部分组成:
1.递归头:什么时候不调用自身方法。如果没有头将陷入死循环
2.递归体:什么时候调用自身方法。
当然,由于递归体现的是一种解决相关问题的过程,我们还可以这样理解:递归就是“递过去,归回来”,是产生栈帧并压栈进入方法栈,然后运行的过程。
下面我们通过一个实际案例再来解释一下:
我们去电影院看电影,找座位是一个比较麻烦的过程,这时你不想一排一排的数,就直接问了前一排的 人:你是第几排。这样前排的人就回去回答你,这样你就知道了当前是第几排。如果前排的人也不想数而是向前一排人问,同时这个人再先前问,一直递归下去直到第一排或者有人明确自己是第几排(假设是K)后,最后按照K+1的方式“归回去”就能知道所有人的位置了。
递归的过程有点像for,有循环条件和循环体,递归当中必须要有递归头来控制什么时候递归结束。
递归就是方法里调用自身
在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以一般情况下不建议使用递归。
在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
案例一、使用递归方式打印九九乘法表
在学习java基础的for循环的过程中我们一般都会使用for循环的嵌套来实现一个下三角形的九九乘法表,直接一个for循环嵌套即可实现,那么下面我们将使用递归的方式重新实现一下:
public static void main(String[] args) {
methodTest(9);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。