方法递归:一个方法在执行时又调用自身的过程,成为递归,运用递归的就叫递归方法。
什么时候使用递归方法?
1 一个大问题可以拆分为多个子问题
2 拆分后的子问题除了数据规模不同之外,解决的思路完全相同
3 存在递归终止条件(拆分子问题是有限的,并不能无限拆分下去)
方法递归有两种
第一种 是没有返回值的方法递归,他所包含的执行语句(或者没有执行语句)不需要返回值就可以执行
下图为例子:该代码没有返回值,定义方法前使用返回值类型void,执行语句,if内为终止语句
system.out.print(num%10+”“); 在printReverse方法中,直接用num输入值,不需要返回值就可以执行。特别的,个人觉得一般存在执行语句的情况下,不需要返回值的递归,执行语句一般在递归方法调用之前。
个人理解,这种递归方法更像普通的循环语句。(特别的,个人理解递归方法就是一种特殊的循环方法)
第二种是有返回值的递归方法,方法的返回值类型为 返回值的类型
具体的执行过程可以参考csdn的其他相关文章,此处叙述个人理解
个人理解:可以把操作过程理解为先不管执行语句,先把所有的递归方法所输入的值先计算出来,然后一个一个把刚刚计算好的输入的值,逆序放入执行语句,进行执行,然后最后,到第一个输入的值,执行完就是整个输出的值。
下图为例子:特别的,该方法返回值类型为空,但是存在返回值,因为返回值被system.out.print接收。
上图中一开始的输入的值为1729 目标为输出各个位的数字
依据个人理解,上图中,先计算递归方法的输入的值(print(num/10));
分别为 172 17 1 ,然后逆序放入执行语句,1放入后执行结果为打印”1”(因为此时小于10,直接执行终止语句,打印本身),17放入执行结果为7(system.out.print(num%10+“”);),172放入执行结果为2,最后1729放入 执行为9,则完成整个递归方法的输出 1729.