참조 50 개 기본적인 산술 질문보기 :
50 개 질문 자바 기본 알고리즘
재귀 방법
package Demo02Rabbits;
import java.util.Scanner;
public class Rabbits_Birth {
/**
* 古典兔子生娃问题:
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
* 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
/*
分析:第一个月只有1对兔子,
第二个月也只有一对儿兔子
第三个月开始生了,所以有1+1=2对兔子
第四个月又生一对,所以有1+1+1=3对兔子
第五个月又生一对,而且第三个月的孩子也开始生了,所以有3+1+1=5对兔子
第六个月又生一对,而且第三个月的孩子也生了一对,第四个月的孩子也开始生了,所以有5+1+1+1=8对兔子
第七个月又生一对,而且第三个月第四个月的孩子也各生一对,第三个月的孩子的孩子也可以生了,
第五个月的孩子也可以生了,所以有8+1+1+1+1+1=13对兔子
...
找规律: 月份: 1 2 3 4 5 6 7
兔子总数: 1 1 2 3 5 8 13
可以看出,从第三个月开始,当月的兔子总数是前两个月兔子的和即:
sum(month)=sum(month-2)+sum(month-1);
*/
public static void main(String[] args) {
//获取启动时时间戳
long start = System.currentTimeMillis();
// 获取用户输入的要查询的月份
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查看第几月兔子的总数?");
int month = sc.nextInt();
// 调用sum方法,计算总共有多少只兔子
System.out.println("第"+month+"个月,总共有"+sum(month)+"对兔子。");
System.out.println("第"+month+"个月,总共有"+sum(month)*2+"只兔子。");
// 获取程序结束时间戳并计算打印程序运行时间
long ends = System.currentTimeMillis();
System.out.println("本次计算共耗时:"+ (ends-start)+"毫秒");
}
// 构建一个递归方法
public static long sum(int month){
//递归的目的:获取前两个月的兔子总数,一二月份都只有一对儿兔子
if((month==1) || (month==2)){
return 1;
}else{
return (sum(month-2)+sum(month-1));
}
}
}
사이클 접근 방식
package Demo02Rabbits;
import java.util.Scanner;
public class Rabbits_Birth_For {
/**
* 古典兔子生娃问题:
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
* 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
/*
分析:第一个月只有1对兔子,
第二个月也只有一对儿兔子
第三个月开始生了,所以有1+1=2对兔子
第四个月又生一对,所以有1+1+1=3对兔子
第五个月又生一对,而且第三个月的孩子也开始生了,所以有3+1+1=5对兔子
第六个月又生一对,而且第三个月的孩子也生了一对,第四个月的孩子也开始生了,所以有5+1+1+1=8对兔子
第七个月又生一对,而且第三个月第四个月的孩子也各生一对,第三个月的孩子的孩子也可以生了,
第五个月的孩子也可以生了,所以有8+1+1+1+1+1=13对兔子
...
找规律: 月份: 1 2 3 4 5 6 7
兔子总数: 1 1 2 3 5 8 13
可以看出,从第三个月开始,当月的兔子总数是前两个月兔子的和即:
sum(month)=sum(month-2)+sum(month-1);
*/
public static void main(String[] args) {
//获取启动时时间戳
long start = System.currentTimeMillis();
// 获取用户输入的要查询的月份
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查看第几月兔子的总数?");
int month = sc.nextInt();
// 调用sum方法,计算总共有多少只兔子
System.out.println("第"+month+"个月,总共有"+sum(month)+"对兔子。");
System.out.println("第"+month+"个月,总共有"+sum(month)*2+"只兔子。");
// 获取程序结束时间戳并计算打印程序运行时间
long ends = System.currentTimeMillis();
System.out.println("本次计算共耗时:"+ (ends-start)+"毫秒");
}
// 构建一个for循环的方法
public static long sum(int month){
long count =0;
long F1 = 1;
long F2 = 1;
if((month==1) || (month==2)){
return 1;
}else{
for (int i = 3; i <= month; i++) {
count = F1+F2;
F1=F2;
F2=count;
}
return count;
}
}
}