当前位置:网站首页>Kotlin算法入门兔子数量优化及拓展
Kotlin算法入门兔子数量优化及拓展
2022-08-11 08:01:00 【易庞宙】
/* 古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每个月的兔子总对数;假设将兔子分为小中大三种,兔子从出生后三个月后每个月就会生出一对兔子, 那么我们假定第一个月的兔子为小兔子,第二个月为中兔子,第三个月之后就为大兔子,那么第一个月分别有1、0、0,第二个月分别为0、1、0, 第三个月分别为1、0、1,第四个月分别为,1、1、1,第五个月分别为2、1、2,第六个月分别为3、2、3,第七个月分别为5、3、5…… 兔子总数分别为:1、1、2、3、5、8、13…… 于是得出了一个规律,从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和,即为斐波那契数列。*/ class RabbitNumber { private var rabbits: Long = 1 private var lastSecondRabbits: Long = 0 private var lastRabbits: Long = 0 /** * 遍历从第一个月到第n个月的兔子总数 */ fun forEachMothsToRabbits(moths: Int) { println(System.currentTimeMillis()) for (i in 1..moths) println("第" + i + "个月兔子数为" + getRabbits(i)) println(System.currentTimeMillis()) } /** * 获取当前月的兔子总数 */ private fun getRabbits(moths: Int): Long { if (moths == 1 || moths == 2) return rabbits = 1 else if (moths == 3) return rabbits = 2 else { //初始化上一个月以及上两个月兔子数量 if (lastRabbits == 0L && lastSecondRabbits == 0L) { lastSecondRabbits = getRabbits(moths - 2) lastRabbits = getRabbits(moths - 1) } //计算这一个返回的兔子数量 rabbits = lastRabbits + lastSecondRabbits /*让两个月的兔子数等于上一个月兔子数,让上个月等于这个月兔子数 为了下一次计算(下月兔子数)更加高效快捷避免过冗余递归影响计算速率*/ lastSecondRabbits = lastRabbits lastRabbits = rabbits return rabbits } } }
边栏推荐
- Do you know the basic process and use case design method of interface testing?
- 1076 Wifi Password (15 points)
- 1003 I want to pass (20 points)
- Active users of mobile banking grew rapidly in June, hitting a half-year high
- 2022-08-10 mysql/stonedb-慢SQL-Q16-耗时追踪
- leetcode: 69. Square root of x
- 麒麟V10系统打包Qt免安装包程序
- XXL-JOB 分布式任务调度中心搭建
- Project 1 - PM2.5 Forecast
- 1.1-回归
猜你喜欢
随机推荐
4.1ROS运行管理/launch文件
Serverless + domain name can also build a personal blog? Really, and soon
Item 2 - Annual Income Judgment
Swagger简单使用
Mysql JSON对象和JSON数组查询
查找最新人员工资和上上次人员工资的变动情况
分布式锁-Redission - 缓存一致性解决
关于Excel实现分组求和最全文档
tf.reduce_mean() and tf.reduce_sum()
IQUNIX A80 exploring TTC金粉 初体验
1036 Programming with Obama (15 points)
基于微信小程序的租房小程序
1051 Multiplication of Complex Numbers (15 points)
oracle数据库中列转行,列会有变化
1.1-Regression
C语言-结构体
零基础SQL教程: 主键、外键和索引 04
1036 跟奥巴马一起编程 (15 分)
Four states of Activity
2022-08-10 mysql/stonedb-slow SQL-Q16-time-consuming tracking








