斐波那契序列-java

来源:互联网 发布:网络贷款利息如何计算 编辑:程序博客网 时间:2024/05/23 07:24
//斐波那契序列 求F(100)public class Fibonacci {    //最简单的递归求斐波那契序列    public int fibonacci1(int n) {        if (n == 1 || n == 2) {            return 1;        } else {            return fibonacci1(n - 1) + fibonacci1(n - 2);        }    }    //由底向上    public long fibonacci2(int n) {        //保存斐波那契序列        long fin[] = new long[n + 1];        fin[1] = 1;        fin[2] = 1;        for (int i = 3; i <= n; i++) {            fin[i] = fin[i - 2] + fin[i - 1];        }        return fin[n];    }    public long fibonacci21(int n) {        //只求最后一个        long a = 1;        long b = 1;        long c = 0;        for (int i = 3; i <= n; i++) {            c = a + b;            a = b;            b = c;        }        return c;    }//使用矩阵乘法    public long fibonacci3(int n) {        long fin[][] = {{1, 1}, {1, 0}};        long a[][] = {{1, 1}, {1, 0}};        long fin1[][] = {{1, 1}, {1, 0}};        long t;        for (int k = 1; k < n; k++) {//控制a矩阵的阶乘数            for (int i = 0; i < 2; i++) {                for (int j = 0; j < 2; j++) {                    t = 0;                    for (int z = 0; z < 2; z++) {                        t = fin[i][z] * a[z][j] + t;                    }                    fin1[i][j] = t;                }            }            //计算出来的fin1还要复制给fin            for (int i = 0; i < 2; i++) {                for (int j = 0; j < 2; j++) {                    fin[i][j] = fin1[i][j];                }            }        }        return fin[0][1];    }    public static void main(String[] args) {        Fibonacci fib = new Fibonacci();        //本来想测100的,天真了 45就3s时间,后面指数增长        long startTime = System.nanoTime(); // 获取开始时间          System.out.println(fib.fibonacci1(45));        long endTime = System.nanoTime(); // 获取结束时间          System.out.println("程序运行时间: " + (endTime - startTime) + "纳秒");        startTime = System.nanoTime(); // 获取开始时间          System.out.println(fib.fibonacci2(100));        endTime = System.nanoTime(); // 获取结束时间          System.out.println("程序运行时间: " + (endTime - startTime) + "纳秒");        //书上不是说用矩阵做效率是lgn吗?怎么做出来不一样        startTime = System.nanoTime(); // 获取开始时间          System.out.println(fib.fibonacci3(100));        endTime = System.nanoTime(); // 获取结束时间          System.out.println("程序运行时间: " + (endTime - startTime) + "纳秒");        startTime = System.nanoTime(); // 获取开始时间          System.out.println(fib.fibonacci21(100));        endTime = System.nanoTime(); // 获取结束时间          System.out.println("程序运行时间: " + (endTime - startTime) + "纳秒");    }}

矩阵乘法的斐波那契这里写图片描述
这里写图片描述
矩阵计算斐波那契序列可能有点问题,但网上找的答案都没有自底向上快不知道怎么回事?

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打印机提示存储已满怎么办 苹果6内存满了怎么办 手机总显示存储空间不足怎么办 我爱她她不爱我怎么办 孩子爱发脾气·父母怎么办 落枕怎么办简单快速的有效方法 老板评奖时偏把我落下怎么办 手机home键坏了怎么办 庙里求的葫芦丢了怎么办 判了抚养费不给怎么办 百度账号密码忘了怎么办 百度云会员到期后文件怎么办 百度网盘存储空间不足怎么办 网赌一天输14万怎么办 在部队训练伤了怎么办 cdrx6激活时不能继续了怎么办 大学毕业一年后找不到工作怎么办 农村乱收垃圾费怎么办 信用卡额度低不想要怎么办 qq公告有敏感词怎么办 qq群公告敏感词怎么办 轿车加了假汽油怎么办? 电信4g变成3g怎么办 电信流量超过40g怎么办 联通卡网络信号很差怎么办 电马桶马达坏了怎么办 我这么好看别人看不到怎么办 户口打回原籍不接受怎么办 小电充电宝丢失怎么办 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办