java经典算法 | 您所在的位置:网站首页 › 兔子总共有多少种病 › java经典算法 |
问题:有一只兔子,从第3个月开始每月生1只兔子,小兔子长到第3个月开始每个月也会生1只兔子,假如兔子都不死,问每个月的兔子总数是多少? 分析:乍一看觉得问题挺复杂,仔细分析之后发现,兔龄2个月及2个月以上的兔子在新的1个月每只都会生1只兔子。对于新的这个月来说,之前兔龄2个月及2个月以上的兔子就是2个月前的兔子总数,也就是说新的1个月相比上1个月增加的兔子数是2个月前的兔子数,其实就是当月的兔子数等于前两个月的兔子数之和。这样一分析,问题就很简单了,目前有两种实现方式,递归的和非递归的。先来看非递归的: private static void rabbitTest1() { int sum_rabbit = 1; //兔子总数 int one_ago_rabbit = 1; //1个月前兔子总数 int two_ago_rabbit = 1; //2个月前兔子总数 for (int month = 1; month < 11; month++) { if (month < 3) { sum_rabbit = 1; } else { sum_rabbit = one_ago_rabbit + two_ago_rabbit; two_ago_rabbit = one_ago_rabbit; one_ago_rabbit = sum_rabbit; } System.out.println("第" + month + "个月" + sum_rabbit + "只兔子"); } }执行结果: 再来看递归的方法: private static void rabbitTest2() { for (int i = 1; i < 11; i++) { System.out.println("第" + i + "个月" + rabbit(i) + "只兔子"); } } private static int rabbit(int month) { if (month < 3) { return 1; } else { return rabbit(month -2) + rabbit(month - 1); } }执行结果: 两种方法思路和结果其实是一致的。
|
CopyRight 2018-2019 实验室设备网 版权所有 |