方法递归调用基本使用
基本介绍
递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁
递归能解决什么问题
递归举例: 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);
}
}
把上面的class T加个 else
class T{
public void test(int n){
if (n > 2){
test(n - 1);
}else{
System.out.println("n=" + n);
}
}
当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)
,一层一层返回调用
递归重要规则
执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
方法的局部变量是独立的,不会互相影响, 比如n变量
如果方法中使用的是引用类型变量(比如数组, 对象), 就会共享该引用类型的数据
递归必须向退出递归的条件逼近,否则就是无限递归
当一个方法执行完毕, 或者遇到return 就会返回,遵守谁调用,就将结果返回给谁, 同时当方法执行完毕或者返回时, 该方法也就执行完毕