package cn.itcast.digui;
/*
* 使用递归实现功能
* 出口,停下来
* 计算规律
*
* 1+2+3+..+100=5050
* 阶乘 1*2*3*4 int 2147483647
*
* 有1对小兔子,第一个月不生,第二个月不生,从第三个月开始,每个月都生下一对小兔子
* 生下来的小兔子,第一个月不生,第二个月不生,从第三个月开始,每个月都生下一对小兔子
* 假设所有的兔子都不死,12个月后,一共有多少对小兔子
*
* 1 2 3 4 5 6 7
* 从第三个月开始,每个数,是前面两个数只和
* 1 1 2 3 5 8 13 21 34 55 89 144
* 数学计算公式 第n项 = 第n-1项+第n-2项
* n>2
*/
public class DiGuiDemo1 {
public static void main(String[] args) {
//int sum = getSum(100);
/*int sum = getJieCheng(10);
System.out.println(sum);*/
int x = tuZi(12);
System.out.println(x);
}
/*
* 利用方法递归,实现斐波那契数列
*/
public static int tuZi(int month){
if(month==1)
return 1;
if(month == 2)
return 1;
return tuZi(month-1)+tuZi(month-2);
}
/*
* 利用数组赋值,实现斐波那契数列
* 索引,求和实现
*/
public static void arrTuZi(int month){
int[] arr = new int[month];
arr[0] = 1;
arr[1] = 1;
for(int x = 2 ; x < month ;x++){
arr[x] = arr[x-1]+arr[x-2];
}
System.out.println(arr[arr.length-1]);
}
/*
* 使用递归,实现阶乘
* 高斯算法+,变成乘法
* 注意: 阶乘的计算结果数据很大,造成int类型不够
*/
public static int getJieCheng(int number){
if( number == 1)
return 1;
return number * getJieCheng(number- 1 );
}
/*
* 使用递归实现高斯算法
* getSum方法求和的
* 每次计算加数不同
* 100+(100-1)....+ + 1 (100-99)
* 加数是1 的时候不在计算
*
* 规律: 100+99+98+97....+1 = 5050
* number=100 +number-1
*
*/
public static int getSum(int number){
if(number == 1)
return 1;
return number+getSum(number-1);
}
//for循环实现1+...?的和
/*public static int getSum(int number){
int sum = 0 ;
for(int x = 1 ; x <= number ; x++){
sum = sum + x;
}
return sum;
}*/
}
|
|