A:定义:编程
方法调用自身。递归
B:递归二要素内存
B1:必须找到递归的出口,否则就是 死递归,死递归就是错误class
B2:必须找到递归的计算规律变量
eg: 5!=5*4*3*2*1方法
C:使用递归的注意事项static
C1:递归的次数不能太多,不然形成栈内存溢出错误
C2:递归有可能会形成结果过大,超过执行类型的最大值范围,所得结果可能形成并非最终想要的结果。return
Demo:void
一、
//利用方法计算阶乘
class FangFaJieCheng{
public static void main(String[] args){
//调用这个阶乘的方法
int sun = JiCheng(5);
System.out.println("最终结果是:"+sun);
}
public static int JiCheng(int i){
//利用if结构来完成阶乘的运算
if(i==1){
return 1;//递归出口,结束方法
}else{
return i*JiCheng(i-1);//递归的规律
}
}
}
二、
/*
在编程中,常常要用到变量的传递
基本类型的变量在传递的时候,传递的是基本类型的值,改变一个变量不会影响其余的变量
*/
public class Main{
public static void main(String[] args){
/*
int i =10;
int j =i; //把i值赋值给j;也就是把10赋值给j
i = 100;
System.out.println("i="+i+",j="+j);
*/
//------------------------------
/*
int i = 10;
change(i);
System.out.println("i="+i);
}
public static void change(int i){
i = 20;
}
*/
//调用递归方法
int res = sun(4);
System.out.println("res="+res);
}
/*错误的递归 没有 终止条件
public static int errSun(int num){
return num + errSun(num-1);
}
*/
public static int sun(int num){
if(num==1){
return 1;
}else{
return num + sun(num-1);
}
}
}
三、// 1!+2!+3!
class FangFaJieCheng{
public static void main(String[] args){
//调用这个阶乘的方法
int sun = JiCheng(4);
System.out.println("最终结果是:"+sun); // 结果 33
}
public static int JiCheng(int i){
//利用if结构来完成阶乘的乘积的加法运算
if(i==1){
return 1;//递归出口,结束方法
}else{
return JiCheng(i-1)+ JiCheng2(i);//递归的规律
}
}
public static int JiCheng2(int i){
//利用if结构来完成阶乘的运算
if(i==1){
return 1;//递归出口,结束方法
}else{
return i*JiCheng2(i-1);//递归的规律
}
}
}