[数据结构——递归]母牛的故事(蓝桥杯1004)

[数据结构------递归]母牛的故事(蓝桥杯1004)

一、题目内容

题目描述:

​ 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入格式:

输入数据由多个测试实例组成,每一个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。

n=0表示输入数据的结束,不做处理。

输出格式:

​ 对于每一个测试实例,输入在第n年的时候母牛的数量。

​ 每个输入占一行。

样例输入:

​ 2

​ 4

​ 5

​ 0

样例输出:

​ 2

​ 4

​ 6

二、思路分析

​ 首先进行输入数据的判断,使用while循环最方便,会一直等到用户输入0,才会停止。因此,在写判断的时候一定要放在调用方法的前面。

​ 我定义了一个方法productOx对母牛的数量进行判断。

​ 根据样例发现,初始的这一头母牛在第一年不生母牛,第二年才生一头母牛,并且出生的母牛,在它出生的第4年才会生母牛。

​ 那么可以看作第一年初始母牛出生,第二年生母牛,并且这个母牛在它自己出生的第4年开始生母牛。

​ 因此(++关键++),当第二年出生的母牛可以看作为,它自己在初始母牛母牛生它的第3年,它自己出生,并且第二年开始生母牛。这样逻辑变和初始母牛的逻辑一样,可以变成递归了。两头母牛都是在自己出生的第二年开始生母牛,并且两头牛的时间相差3年。

++再次总结变成,初始母牛第二年开始生母牛,加上3年后的每一年加入一头相同的初始母牛开始生母牛。++

三、代码实现
java 复制代码
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (true) {
        // 从用户输入读取年份
        int year = sc.nextInt();
        // 如果年份为0,则退出循环
        if (year == 0) {
            break;
        }
        // 调用productOx方法计算并打印出年份的乘积
        int productOx = productOx(year);
        System.out.println(productOx);
    }
}

// 计算年份的乘积
private static int productOx(int year) {
    if (year <= 3) {
        return year;
    }
    // 递归调用productOx方法,并将结果相加
    return productOx(year - 1) + productOx(year - 3);
}
不足之处,请留言指教
相关推荐
计算机安禾9 小时前
【数据结构与算法】第42篇:并查集(Disjoint Set Union)
c语言·数据结构·c++·算法·链表·排序算法·深度优先
码界奇点9 小时前
基于Spring Boot的前后端分离商城系统设计与实现
java·spring boot·后端·java-ee·毕业设计·源代码管理
吃着火锅x唱着歌9 小时前
LeetCode 150.逆波兰表达式求值
linux·算法·leetcode
一叶飘零_sweeeet9 小时前
深度剖析:Java 并发三大量难题 —— 死锁、活锁、饥饿全解
java·死锁·活锁·饥饿
IT乐手9 小时前
java 对比分析对象是否有变化
android·java
云烟成雨TD9 小时前
Spring AI Alibaba 1.x 系列【18】Hook 接口和四大抽象类
java·人工智能·spring
Hachi被抢先注册了9 小时前
Docker学习记录
java·云原生·eureka
YuanDaima20489 小时前
二分查找基础原理与题目说明
开发语言·数据结构·人工智能·笔记·python·算法
阿Y加油吧10 小时前
两道中等 DP 题拆解:打家劫舍 & 完全平方数
算法·leetcode·动态规划
七颗糖很甜10 小时前
python实现全国雷达拼图数据的SCIT风暴识别
python·算法·scipy