java经典算法 您所在的位置:网站首页 兔子总共有多少种病 java经典算法

java经典算法

2023-12-28 00:06| 来源: 网络整理| 查看: 265

问题:有一只兔子,从第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 实验室设备网 版权所有