Q江小白 2018-05-06 15:21 采纳率: 100%
浏览 713
已采纳

斐波那契问题最后的返回值为什么是数组的第一列

O(logN)算法中

public int Fibonacci(int n){
if(n<1)
return 0;
if(n==1||n==2)
return 1;
int base[][]={{1,1},{1,0}};
int res[][]=matrixPower(base,n-2);

return res[0][0]+res[1][0]; //这里为什么是这样,为什么取res数组的第一列,

在计算矩阵时,计算的结果还是矩阵(二维数组),为什么就取数组的第一列。
//(


}

代码如下:

package 实验;
/*

  • 矩阵的n次方
    */
    public class Matrix {
    public int[][]muilmatrix(int[][]m1,int[][]m2){
    int res[][]=new int[m1.length][m2[0].length];
    for(int i=0;i<m2[0].length;i++){
    for(int j=0;j<m1.length;j++){
    for(int k=0;k<m2.length ;k++){
    res[i][j]+=(m1[i][k]*m2[k][j]);

           }
       }
    

    }
    return res;
    }
    //计算p次方
    public int[][] matrixPower(int [][]m1,int p){
    int res[][]=new int[m1.length][m1[0].length];
    for(int i=0;i res[i][i]=1;
    }
    int [][]temp=m1;
    for(;p!=0;p>>=1){
    if((p&1)!=0){
    res=muilmatrix(res,temp);
    }
    temp=muilmatrix(temp,temp);
    }
    return res;
    }
    public int Fibonacci(int n){
    if(n<1)
    return 0;
    if(n==1||n==2)
    return 1;
    int base[][]={{1,1},{1,0}};
    int res[][]=matrixPower(base,n-2);
    return res[0][0]+res[1][0]; //这里为什么是这样,
    }
    public static void main(String args[]){
    Matrix matrix=new Matrix();
    int a[][]={{1,1},{1,0}};
    int b[][]= matrix.matrixPower(a, 2);
    int c=9;
    System.out.println(matrix.Fibonacci(c));
    //输出

    }
    }

  • 写回答

3条回答 默认 最新

  • threenewbee 2018-05-06 15:53
    关注
     m1-------------
    1  1  
    1  0  
    m2-------------
    1  1  
    1  0  
    ---------------
    2  1  
    1  1  
    m1-------------
    1  0  
    0  1  
    m2-------------
    2  1  
    1  1  
    ---------------
    2  1  
    1  1  
    m1-------------
    2  1  
    1  1  
    m2-------------
    2  1  
    1  1  
    ---------------
    5  3  
    3  2  
    m1-------------
    1  0  
    0  1  
    m2-------------
    1  1  
    1  0  
    ---------------
    1  1  
    1  0  
    m1-------------
    1  1  
    1  0  
    m2-------------
    1  1  
    1  0  
    ---------------
    2  1  
    1  1  
    m1-------------
    1  1  
    1  0  
    m2-------------
    2  1  
    1  1  
    ---------------
    3  2  
    2  1  
    m1-------------
    2  1  
    1  1  
    m2-------------
    2  1  
    1  1  
    ---------------
    5  3  
    3  2  
    m1-------------
    3  2  
    2  1  
    m2-------------
    5  3  
    3  2  
    ---------------
    21  13  
    13  8  
    m1-------------
    5  3  
    3  2  
    m2-------------
    5  3  
    3  2  
    ---------------
    34  21  
    21  13  
    

    对应的公式推导图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型