[数据结构——递归]母牛的故事(蓝桥杯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);
}
不足之处,请留言指教
相关推荐
于先生吖19 小时前
Java框架开发短剧漫剧系统:后台管理与接口开发
java·开发语言
智者知已应修善业19 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe19 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼19 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
daidaidaiyu20 小时前
Spring IOC 源码学习 声明式事务的入口点
java·spring
菜菜小狗的学习笔记20 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka20 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石00820 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct20 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
发际线还在20 小时前
互联网大厂Java三轮面试全流程实战问答与解析
java·数据库·分布式·面试·并发·系统设计·大厂