for循环和递归解决斐波拉契数列兔子问题
题目:兔子从第三个月下一对崽子,以后每个月都下一对,假设兔子不死,并且他们的崽子也是这样的,问N月后一共有多少只兔子。
题目分析:
月份 | 兔子数量 | 编程思想分析 |
---|
一月 | 1 | 1(第一对兔子) |
二月 | 1 | 1(第一对兔子) |
三月 | 2 | 2 (第一对兔子与它下的第一对兔崽) |
四月 | 3 | 3 (第一对兔子与它下的第一对崽和第二对崽) |
五月 | 5 | 5 (第一对兔子与下的第三对崽,第一对崽和它下的崽,第二对崽) |
规律 | 每三个月开始 | sum(month-1) + sum(month-2) |
一、for循环实现
public static void main(String[] args) {
//创建键盘扫描器
Scanner h = new Scanner(System.in);
//提示用户输入内容
System.out.println("请输入要查询的月份:");
//接收用户输入的内容
int month = h.nextInt();
//第一个月的兔子
int m1 = 1;
System.out.println("第一个月的兔子数为:"+m1);
//第二个月的兔子
int m2 = 1;
System.out.println("第二个月的兔子数为:"+m2);
//第三个月的兔子
int m3 = m1+m2;
System.out.println("第三个月的兔子数为:"+m3);
//四月之后的兔子数量
for (int i = 4; i <= month; i++) {
int sum = m2+m3;
m2 = m3;
m3 = sum;
System.out.println("第"+i+"个月的兔子为"+sum+"对");
}
//关闭键盘扫描器
h.close();
}
二、递归方法实现
public static void main(String[] args) {
//创建键盘扫描器
Scanner key = new Scanner(System.in);
//提示用户输入要查询的月份
System.out.println("请输入要查询的月份:");
//接收用户输入的月份
int month = key.nextInt();
//调用sum方法计算输入月份的兔子数
System.out.println("该月的兔子数为:"+sum(month));
key.close();
}
创建sum方法
public static int sum(int month) {
//判断月份是否为1月或者2月,若是返回第一对兔子数,不是的话执行else
if(month==1 || month==2) {
return 1;
}else {
//从第三个月之后的兔子数量
return sum(month-1)+sum(month-2);
}
}
for循环结果显示
递归算法结果显示