【JAVA】递归

本文深入探讨了JAVA中的递归概念,包括克隆Person对象、递归执行机制的解析,以及方法的递归调用规则。在克隆部分,强调了如何创建独立的复制对象。递归执行机制部分解释了每层递归在栈中的独立执行,并通过阶乘计算举例说明。方法递归调用章节中,提到了局部变量的独立性和引用类型变量的共享特性,以及递归必须接近退出条件的重要性,防止栈溢出错误。
摘要由CSDN通过智能技术生成

递归

214–219

克隆

编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同。

//编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。
//克隆对象,注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
class Person{
  
	   int age;
	   String name;
   }

//注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
//编写方法的思路
//1.方法的返回类型Person
//2.方法的名字copyPerson
//3.方法的形参(Person p)
//4.方法体,创建一个新对象,并复制属性,返回即可

   class MyTools{
	   public Person copyPerson(Person p) {
		Person p2=new Person();
		p2.name=p.name;
		p2.age=p.age ;
		return p2;
		
		}
   
 }

  public class ss{
	   public static void main(String[] args){
	Person p=new Person();
    p.name="milan";
    p.age=33;
    MyTools tools=new MyTools();
    Person p3=tools.copyPerson(p);
    System.out.println("p age="+p.age+"\tp name="+p.name);
    System.out.println("p2 age="+p3.age+"\tp2 name="+p3.name);
	 } 
	  }

递归执行机制

递归(recursion)

class T{
	public  void test(int n) {
		if(n>2) {
			test(n-1);
		}
		System.out.print("n="+n);//调用自身后下面的代码依然运行
		                         //每一个栈都是完整执行它的方法
	}
	
}
public class ss {
	public static void main(String[] args) {
		T t1=new T();
		t1.test(4);
		
	}
}


n=2 n=3 n=4
每次执行一次自身都会在栈中上方新开辟一块空间,从上至下执行代码。
每一个栈都是完整执行它的方法.

class T{
	public  void test(int n) {
		if(n>2) {
			test(n-1);
		}
		else{
		           System.out.print("n="+n);
		}
		                         //每一个栈都是完整执行它的方法,此时3 ,4不会再进入else中,所以结果只有n=2.
	}
	
}
public class ss {
	public static void main(String[] args) {
		T t1=new T();
		t1.test(4);
		
	}
}

n=2

阶乘(factorial)
一级一级往上调用,算到值后再向下返回值,直到最终结果。

方法递归调用

递归重要规则

  1. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
  2. 方法的局部变量是独立的,不会相互影响,比如n变量
  3. 如果方法中使用的是引用类型变量(比如数组,对象)。就会共享该引用类型的数据.(堆里的东西变了,后面调用的数据都是变了的数据)
  4. 递归必须向退出递归的条件逼近,否则就是无限递归,出现
    StackOverflowError,栈溢出)
  5. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就
    将结果返回给谁
    ,同时当方法执行完毕或者返回时,该方法也就执行完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值