当前位置: 首页 > news >正文

蓝桥试题:斐波那契数列

一、题目要求

斐波那契数列定义为  f(n) = f(n - 1) + f(n - 2),同时f(1) = 1 , f(2) = 1

请输出数列的第n个数对 1e9 + 7 取模的值

二、代码展示

import java.util.Arrays;
import java.util.Scanner;

public class ikun {
    static long []dp;
    static long mod = (long) 1e9 + 7;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        dp = new long[n + 1];
        Arrays.fill(dp , -1);
        dp[1] = 1;
        dp[2] = 1;
        System.out.println(dfs(n));
    }

    public static long dfs(int n){
        if (dp[n] != -1){ //对应 f(1) 和 f(2)
            return dp[n];
        }
        long ans = dfs(n - 1) + dfs(n - 2);
        ans %= mod;
        dp[n] = ans;
        return dp[n];
    }
}

该Java程序用于计算斐波那契数列的第n项,并对结果取模 1e9+7。以下是代码的详细解释:

代码结构

  1. 类与变量

    • dp 数组:动态规划缓存,存储已计算的斐波那契数值。

    • mod:模数 1e9 + 7,防止数值溢出。

  2. 主方法 main

    • 读取用户输入的整数 n

    • 初始化 dp 数组大小为 n+1,填充为 -1(表示未计算)。

    • 设置初始条件 dp[1] = 1 和 dp[2] = 1,对应斐波那契数列的前两项。

    • 调用递归方法 dfs(n) 并输出结果。

  3. 递归方法 dfs

    • 基础情况:若 dp[n] 已计算(不为 -1),直接返回缓存值。

    • 递归计算:通过 dfs(n-1) + dfs(n-2) 计算第n项,并对结果取模。

    • 缓存结果:将计算结果存入 dp 数组,避免重复计算。

斐波那契数列定义

  • 初始条件:𝐹(1)=1   𝐹(2)=1

  • 递推关系:𝐹(𝑛)=𝐹(𝑛−1)+𝐹(𝑛−2)mod  (1e9 + 7)

时间复杂度与优化

  • 时间复杂度:𝑂(𝑛)O(n),每个数仅计算一次。

  • 空间复杂度:𝑂(𝑛)O(n),用于存储 dp 数组。

总结

该程序通过记忆化搜索高效计算斐波那契数列的第n项,适用于中等规模的输入。初始条件设定和递推关系符合标准斐波那契数列定义,结果经取模确保数值范围合理。

http://www.dtcms.com/a/48427.html

相关文章:

  • 【Leetcode 每日一题】1278. 分割回文串 III
  • SpringBoot系列之Spring AI+DeekSeek创建AI应用
  • 【每日八股】计算机网络篇(二):TCP 和 UDP
  • 虚拟机配置
  • ThreadLocal的Key是弱引用给垃圾回收带来的问题
  • 深入探究Python机器学习算法:无监督学习(聚类算法如 K-Means、DBSCAN,降维算法如 PCA、SVD)
  • 每日一题之宝石组合
  • Docker + Vue2 热重载:为什么需要 CHOKIDAR_USEPOLLING=true?
  • 健康饮食,健康早餐
  • 低功耗抄表方案-支持Modbus、DL/T645 及 DL/T698 协议‌电表
  • 简易的微信聊天网页版【项目测试报告】
  • Spring Boot 自动装配深度解析与实践指南
  • Libgdx游戏开发系列教程(2)——接水滴游戏实现
  • 知识周汇|SAP脚本自动化-淋过雨的人更懂得伞的价值
  • Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验
  • CentOS 7 中安装 Docker和Docker Compose
  • 实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
  • 基于OFDR的层压陆相页岩油储层中非对称裂缝群传播的分布式光纤监测
  • 可终身授权的外国工具,不限次数使用!PDF转CAD的软件
  • WeakAuras Lua Script TOC
  • .h264/.h265文件 前端直接播放
  • iBeacon数据包全解析:读懂BLE广播包中的定位密码
  • 网页复制小妙招
  • Electron、Tauri及其它跨平台方案终极对比
  • 用不同语言写力扣题的思考:如何选择最适合的编程语言
  • Spark核心之02:常用算子详解
  • 软考高级信息系统项目管理师笔记-第8章项目整合管理
  • 园区能耗管理新趋势——构建能源数字化体系,迈向低碳未来
  • 结构体位域操作,和共用体配合使用
  • 数据集/API 笔记 新加坡相对湿度数据