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);//遞歸的規律
}
}
}