浅谈:算法中的斐波那契数(六)

方法五:矩阵求幂

斐波那契数列矩阵方程:

算法:

  • 若 N 小于等于 1,则返回 N。
  • 使用递归函数matrixPower 计算给定矩阵 A 的幂。幂为 N-1,其中 N 是第 N 个 斐波那契数。
  • matrixPower 函数将对 N/2 个斐波那契数进行操作。
  • 在 matrixPower 中,调用 multiply 函数将两个矩阵相乘。
  • 完成计算后,返回 A00 得到第 N 个斐波那契数。

Java 实现

复制代码
class Solution {
    int fib(int N) {
        if (N <= 1) {
          return N;
        }
        int[][] A = new int[][]{{1, 1}, {1, 0}};
        matrixPower(A, N-1);

        return A[0][0];
    }

    void matrixPower(int[][] A, int N) {
        if (N <= 1) {
          return;
        }
        matrixPower(A, N/2);
        multiply(A, A);

        int[][] B = new int[][]{{1, 1}, {1, 0}};
        if (N%2 != 0) {
            multiply(A, B);
        }
    }

    void multiply(int[][] A, int[][] B) {
        int x = A[0][0] * B[0][0] + A[0][1] * B[1][0];
        int y = A[0][0] * B[0][1] + A[0][1] * B[1][1];
        int z = A[1][0] * B[0][0] + A[1][1] * B[1][0];
        int w = A[1][0] * B[0][1] + A[1][1] * B[1][1];

        A[0][0] = x;
        A[0][1] = y;
        A[1][0] = z;
        A[1][1] = w;
    }
}

复杂度分析

相关推荐
Escalating_xu几秒前
【数据结构】顺序表的应用:动态通讯录项目与双指针经典算法
c语言·数据结构·算法
天空属于哈夫克31 分钟前
企业微信二次开发:外部群接 AI 客服,如何避免抢答和双回?
人工智能
FBI HackerHarry浩3 分钟前
Pytorch中 CPU tensor vs GPU tensor
人工智能·pytorch·python·深度学习
死磕音视频3 分钟前
ChatGPT Deep Research 入门:把复杂问题做成带出处的调研报告
人工智能·chatgpt·信息检索·deep research·调研方法
其实防守也摸鱼4 分钟前
CTF Web 6 题全解 Writeup
linux·sql·学习·算法·安全·ctf·xss
小草cys5 分钟前
图片一键转全矢量可编辑PPT——纯Python实现,零依赖,离线可用
人工智能·python·powerpoint
宇明一不急9 分钟前
string和byte的相互转换
算法
weixin_416660079 分钟前
AI 生成的 Mermaid 流程图和 LaTeX 公式,怎么一起导出到 Word?
人工智能·word·流程图·豆包
xsd2024111811 分钟前
Compositor:8MB 开源 Photoshop 平替
人工智能
Warren2Lynch13 分钟前
从纯文本到可视化知识库:Visual Paradigm OpenDocs 集成 Web Diagram Studio 全面指南
人工智能