package cn.bufanli.iodemo;
/**
* 方法的递归调用
* 方法自己调用自己
* 适用于: 方法中运算的主体不变,但运行的方法参数会发生变化
* 注意:
* 递归一定要有出口,必须可以让程序可以停下
* 递归次数不能过多
* 构造方法,禁止递归
*/
public class DiGuiDemo {
public static void main(String[] args) {
System.out.println(getSum(100));
System.out.println(getJieCheng(100));
System.out.println(getFBNQ(12));
}
/**
* 计算1+...到 n 的和
*/
public static int getSum(int n){
if(n==1){
return 1;
}
return n+getSum(n-1);
}
/**
* 计算阶乘
* 5*4*3*2*1
*/
public static int getJieCheng(int n){
if(n==1){
return 1;
}
return n*getJieCheng(n-1);
}
/**
* 计算斐波那契数列(不死神兔)
* 一对兔子,第一个月不生第二个月不生,从第三个月开始生下一对兔子
* 生下的那一对兔子,第一个月不生第二个月不生,从第三个月开始生下一对兔子
* 12个月 一共有多少对兔子
* 1 1 2 3 5 8 13 21 34 55 89 144
* 从第三个月开始 month = (month-1)+(month-2)
*/
public static int getFBNQ(int month){
if(month==1){
return 1;
}
if(month==2){
return 1;
}
return getFBNQ(month-1)+getFBNQ(month-2);
}
}