递归:方法定义中调用方法本身的现象
注意实现:
1.递归一定要有出口,否则就是死递归 StackOverflowError
2.递归的次数不能过多,否则也会出现死递归
特殊事项:构造方法不可以递归定义
举例:
从前有座山,山上有座庙,庙里有个老和尚,老和尚再给小和尚讲故事,故事是:
从前有座山,山上有座庙,庙里有个老和尚,老和尚再给小和尚讲故事,故事是:
从前有座山,山上有座庙,庙里有个老和尚,老和尚再给小和尚讲故事,故事是:
代码块
递归1-100的和
public class DiguiHe{
public static void main(String[] args) {
System.out.println("递归1-100和:"+dghe(5));
System.out.println("递归1-100和:"+fdghe(5));
}
/**
* 递归1-100和
* @Author Mr.Peng
*/
private static int dghe(int i) {
/**
* 这里以5为例:
* 5+dghe(4)=5+4+dghe(3)=5+4+3+dghe(2)+5+4+3+2+dghe(1)=5+4+3+2+1
* 当dghe(1)走 return 1;程序结束了
*/
if(i == 1){
return 1;
}else{
return i+dghe(i-1);
}
}
/**
* 非递归1-100和
* @Author Mr.Peng
*/
private static int fdghe(int i) {
int sum = 0;
int j = 1;
while(j<=i){
sum+=j;
j++;
}
return sum;
}
}
递归10的阶乘
public class DiguiChen{
public static void main(String[] args) {
System.out.println("递归阶乘:"+dgjc(10));
System.out.println("非递归阶乘:"+fdgjc(10));
}
/**
* 递归阶乘
* @Author Mr.Peng
*/
private static int dgjc(int i) {
//这里举例5的阶乘,10的阶乘同理:
//5*dgjc(4)=5*4*dgjc(3)=5*4*3*dgjc(2)=5*4*3*2*dgjc(1)=5*4*3*2*1=120
if(i == 1){
return 1;
}else{
return i*dgjc(i-1);
}
}
/**
* 非递归阶乘
* @Author Mr.Peng
*/
private static int fdgjc(int i) {
// TODO Auto-generated method stub
int sum = 1;
while(i>0){
sum*=i;
i--;
}
return sum;
}
}