斐波那契数列
2016-03-09 22:39
211 查看
package neu.soft.mianshi;
public class feibonaqie {
}
public class feibonaqie {
public static void main(String[] args) { // System.out.println(0X0F); /* * int i =1; i<<=2; System.out.println(i); */ } // O(2^n) public static int f1(int n) { if (n < 1) { return 0; } if (n == 1 || n == 2) { return 1; } return f1(n - 1) + f1(n - 2); } // O(N) public static int f2(int n) { if (n < 1) { return 0; } if (n == 1 || n == 2) { return 1; } int res = 1; int pre = 1; int temp = 0; for (int i = 3; i <= n; i++) { temp = res; res = res + pre; pre = temp; } return res; } /** * 如果严格遵循 : F(N) = F(N-1) + F(N-2) * 那么 (F(n),F(n-1)) = (F(N-1),F(N-2))*|a b| * |c d| * @param n * @return */ //O(logn) public static int f3(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 int[][] matrixPower(int[][] m, int p) { int[][] res = new int[m.length][m[0].length]; // 单位矩阵 for (int i = 0; i < res.length; i++) { res[i][i] = 1; } int[][] temp = m; // 75的二进制1001011 for (; p != 0; p >>= 1) { if ((p & 1) != 0) { res = muliMatrix(res, temp); } temp = muliMatrix(temp, temp); } return res; } // 两矩阵相乘 public static int[][] muliMatrix(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; }
}
相关文章推荐
- 删除空格
- map的四种遍历方法
- POJ-1639 Picnic Planning (最小度限制生成树)(模板题)
- JAVA中堆和栈的区别
- Qt学习之路(29): 绘图设备
- UESTC 1282 被兵暴的沈宝宝 Catalan数&&逆元
- 双缓冲
- 第二周项目一宣示主权
- UVA-1579 Matryoshka (区间DP)
- HeadFirst设计模式之适配器模式
- [RxJS] Changing Behavior with MapTo
- 动态规划 Longest Ordered Subsequence
- php的学习笔记之面向对象(四)继承补充
- 文件查找工具之find命令详解
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- vb.net 获取当前程序的版本(软件自己的版本)
- 无题
- UML图示
- 第一周3.5
- Linux进程间通信之信号量