Java递归
- 递归的定义:从字面的意思来理解,递归就是不断的重复的调用自己;
- 递归的特点:因为是重复调用自己了,所以看起来像一个循环,所以为了避免内存溢出系统崩溃,我们需要在方法里加一个返回值判断,用于递归循环的跳出;
- 递归的缺陷:递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。任何能用递归解决的问题也能使用迭代解决,不强调效率问题时,可以采用递归;在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。
- 实例:求和1到100
public class Test {
public static void main(String[] args) {
System.out.println(sum(1));
}
//调用求和方法
public static int sum(int n){
//跳出递归判断
if(n == 100){
return 100;
}
return n + sum(n+1);
}
}
首先第一次调用sum,方法里的参数值为1,然后进入到if中,由于值不是100,所以不会执行return 100;程序会继续向下进行;
运行到return n参数值 1 已经保存在n里,代码运行到sum(n+1),又创建一个sun方法,此时n值自增+1为2,并保存到第二个sum方法的n里,那么继续运行,接下来就是第二个sum方法里创建第三个sum方法,第三个sum方法里 创建第四个sum方法…创建后自增的值都会保存到当前sum方法的int n中,最终运行到100次后,if会将100的值返回,方法就不会继续执行到return n+sum(n+1),所以就不会在创建新的sum方法了,递归也就跳出了。