方法递归调用基本使用

基本介绍

递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁

递归能解决什么问题

java 调用自己 递归 java方法的递归调用_java

java 调用自己 递归 java方法的递归调用_java 调用自己 递归_02

递归举例: recursion

打印问题

package chapter7;
public class Recursion01 {
    public static void main(String[] args) {
        T t1 = new T();
        t1.test(4);
    }
}

class T{
    public void test(int n){
        if (n > 2){
            test(n - 1);  //到这发生了递归
        }
        System.out.println("n=" + n);
    }
}

java 调用自己 递归 java方法的递归调用_数据结构_03

把上面的class T加个 else

class T{
    public void test(int n){
        if (n > 2){
            test(n - 1);
        }else{
            System.out.println("n=" + n);
        }

    }

java 调用自己 递归 java方法的递归调用_数据结构_04

当n=3时,下面的栈进入到 if 后才会开个栈,就不会进入到 else 里了,所以 3,4就不会被输出了

阶乘问题 factorial

public class R1 {
    public static void main(String[] args) {
        T t1 = new T();
        int res = t1.factorial(5);
        System.out.println("5的阶乘 res" + res);
    }
}

class T{

	    public int factorial(int n){
	        if (n == 1){
	            return 1;
	        }else{
	            return factorial(n - 1) * n;
	        }
	    }
	}
谁调用就返回给哪个,最后return 1返回给factorial(1)factorial(1)x2=2返回给 factorial(2),一层一层返回调用

java 调用自己 递归 java方法的递归调用_递归_05

递归重要规则

执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

方法的局部变量是独立的,不会互相影响, 比如n变量

如果方法中使用的是引用类型变量(比如数组, 对象), 就会共享该引用类型的数据

递归必须向退出递归的条件逼近,否则就是无限递归

当一个方法执行完毕, 或者遇到return 就会返回,遵守谁调用,就将结果返回给谁, 同时当方法执行完毕或者返回时, 该方法也就执行完毕