1 问题
编写一个Java程序,解决以下问题:
2 方法
再导入java.util包下的Scanner类,构建Scanner对象,以便输入。
通过对问题的分析,我们可以得到,当位数为1时,其返回值为1;
当位数为2时,其返回值为1;
当位数为3时,其返回值为1,由此可得这是它们的起始值。
然后当位数为4时,其返回值为3=2+1;
当位数为5时,其返回值为5=3+2;
当位数为6时,其返回值为8=5+3;当位数为7时,其返回值为13=8+5,所以由以上可得,当大于等于3的情况下,当前位数的返回值为:
f(n)=f(n-1)+f(n-2)。
输出结果,当位数等于7时,其返回值为13。
public class boke2 { public static void main(String[] args) { System.out.println("请输入月份:"); Scanner s = new Scanner(System.in); int n = s.nextInt(); System.out.println("总数:"+"\n"+f(n)); } public static int f(int n){ if (n!=1&&n!=2){ if (n!=3){ return f(n-1)+f(n-2); } return 2; } else return 1; } } |
3 结语
针对古典问题,首先先通过分析,可以发现此问题的突破口在三个月之后,第一个月和第二个月都是1,从第三个月开始计算第一次出生的兔子数,看出当月份为n时,兔子的对数为前两个之和,所以设对数为f(n),通过编程证明了该方法是有效的,本文的方法只是其中一种,未来可以研究出更多更简洁的方法进行实验。