`

java--19.用矩阵求Fibonacci数列的第N项

 
阅读更多
参考了网上的思路,写了个Java版的:



public class Fibonacci {

	final  static int[] A={1,1,1,0};
	
	
	public static void main(String[] args) {
		int n=7;
		for(int i=0;i<=n;i++){
			int f=fibonacci(i);
			System.out.print(f+" ");
		}
	}

	static int fibonacci(int n){
		if(n==0)return 0;
		if(n==1)return 1;
		if(n>1){
			int[] re=power(n-1);
			return re[0];//矩阵乘积的第00项为所求
		}
		return -1;
	}
	
	//a^n=a^(n/2)*a^(n/2)	or   a^n=a^(n/2)*a^(n/2)*a
	static int[] power(int n){
		int[] a=new int[4];
		if(n==1){
			a=A;
		}
		else if(n%2==0){
			a=matixMultiply(power(n/2),power(n/2));
		}else if(n%2==1){
			int[] temp=matixMultiply(power(n/2),power(n/2));
			a=matixMultiply(A,temp);
		}
		return a;
	}
	
	//矩阵乘法
	// return A*B
	static int[] matixMultiply(int[] a,int [] b){
		int[] re=new int[4];
		re[0]=a[0]*b[0]+a[1]*b[2];
		re[1]=a[0]*b[1]+a[1]*b[3];
		re[2]=a[2]*b[0]+a[3]*b[2];
		re[3]=a[2]*b[1]+a[3]*b[3];
		return re;
	}
}



分享到:
评论

相关推荐

    Java面试 Java超级经典100问题 Java高级开发工程师必备 Java面试宝典

    斐波那契数列的第n项(青蛙跳台阶)10.二进制中1的个数、11.数值的整数次方、12.打印1到最大的n位数13. O(1)时间删除链表节点.14.使数组中的奇数位于偶数前面15.找链表中倒数第K个节点.16.输出反转后的链表17.合并两个...

    输入两个正整数m和n求其最大公约数和最小公倍数 (2).pdf

    45. **Fibonacci数列**:递归或迭代计算Fibonacci数列的前40项。 46. **密码加密**:根据字符映射规则实现加密算法。 47. **百元买百鸡问题**:典型的整数线性规划问题,通过穷举所有可能的组合找出解。 48. **...

    JAVA练习题(for循环练习题等)

    斐波那契数列定义为:第一项与第二项均为1,后续每一项都是前两项之和(如1, 1, 2, 3, 5, 8, 13, 21...)。 ```java int first = 1, second = 1; for (int i = 0; i ; i++) { System.out.print(first + " "); int...

    java算法练习题 大家下载看看啦

    - **描述**:编写一个程序,计算斐波那契数列的前N项。 - **实现思路**: - 使用循环结构(如`for`循环)来依次计算每一项的值。 - 设置两个变量分别存储当前项和前一项的值,通过这两个变量计算下一项的值。 - ...

    Java50道经典题目

    斐波那契数列求值 - **知识点**: 斐波那契数列的前20项。 - **实现方法**: - 使用循环或递归来计算斐波那契数列的值。 #### 21. 阶乘求和 - **知识点**: 阶乘和是指1! + 2! + … + n! 的和。 - **实现方法**: - ...

    java 经典习题.doc

    1. **斐波那契数列**:程序1中的兔子问题涉及到斐波那契数列,它是一种基于递归关系的数列,每个数字是前两个数字的和。 2. **素数判断**:程序2中,通过检查一个数能否被2到其平方根之间的所有数整除来判断是否为...

    JAVA循环 练习题

    - **题目解析**:生成斐波那契数列的前7项,斐波那契数列定义为每一项都是前两项的和,初始两项为1。 - **实现思路**:使用循环结构,初始化前两项为1,然后在循环中不断更新当前项为前两项之和,直至生成所需项数。...

    达内 coreJava 习题答案

    12、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值 1 1 2 3 5 8 13 21 34 规律:一个数等于前两个数之和 //计算斐波那契数列(Fibonacci)的第n个值 public class Fibonacci{ public static void main...

    一些java 的练习题帮助大家学习java

    - **题目描述**:编写一个程序,输出斐波那契数列的前N项。 - **解题思路**: - 使用循环结构(如for循环)来生成斐波那契数列。 - 设置两个变量存储当前项和前一项的值,并在每次循环中更新这两个变量的值。 - ...

    非常好的Java练习题

    15. **斐波那契数列求和**:计算斐波那契数列的前20项之和。 16. **递归求阶乘**:使用递归函数计算阶乘。 17. **年龄递推问题**:递归计算每个人的实际年龄。 18. **数字位数判断与倒序输出**:数字字符串处理,...

    《剑指Offer》Java代码(高清带目录) (1).pdf

    9. 斐波那契数列的应用:斐波那契数列在计算机科学和算法中有广泛应用,如9.1输出斐波那契数列的第n项,9.2青蛙跳台阶问题等。 10. 二进制中1的个数:主要考察位运算的技巧,以及如何在不使用循环的情况下计算一个...

    编程练习题 提高编程能力

    - 斐波那契数列是由0和1开始,后面的每一项都是前面两项的和。 - 可以使用循环(如 for 循环)来实现。 - 使用变量存储当前项和前一项的值。 ### 2. 质数判断 - **题目**:编写一个程序,找出101到200之间的...

    java编程题

    20. **斐波那契数列求和**:计算前20项并求和,可以使用循环或递归。 21. **阶乘和**:计算1到20的阶乘和。 22. **递归求阶乘**:使用递归函数计算阶乘。 23. **年龄推理**:根据条件进行链式推理。 24. **数字位数...

    完整学习笔记:《剑指offer》Java版代码实现

    第九题 斐波那契数列的第n项(青蛙跳台阶) 测试9 第十题 二进制中1的个数 测试10 第十一题 数值的整数次方 测试11 第十二题 打印1到最大的n晚数 测试12 第十三题 O(1)时间删除链表节点 测试13 第十四题 使数据库中...

    Java 循环练习40题

    - 使用循环结构(如`for`或`while`循环)来计算斐波那契数列。 #### 题目2:判断素数 - **知识点**: - 素数的定义及判断方法。 - 判断一个数是否为素数的算法。 - 如何使用循环(如`for`循环)进行连续的除法...

    java基础编程题

    1. **斐波那契数列**:生成斐波那契数列直到特定值。 2. **素数判断**:判断在101到200之间的数是否为素数。 3. **水仙花数**:找出所有三位数中的水仙花数(一个三位数,其各位数字立方和等于该数本身)。 4. **质...

    程序员面试题精选100题.doc

    - **代码实现**:展示如何使用矩阵快速幂算法高效计算斐波那契数列。 ### 17. 把字符串转换成整数 - **状态机思想**:可以将这个过程看作是一个有限状态机的过程,定义不同的状态来处理字符串中的各种符号和数字。...

    JAVA练习题(50题)

    - **实现思路**:通过循环或递归的方式计算斐波那契数列中的第n个数字。 #### 练习题2:质数判断 - **知识点**: - 质数的概念:只能被1和自身整除的大于1的自然数。 - 开平方根技巧:减少不必要的检查次数。 - ...

    《剑指Offer》题目及代码.pdf

    9. 斐波那契数列的第n项:需要实现动态规划,或使用递归和备忘录技巧来优化重复计算。 10. 二进制中1的个数:这是一道位运算相关的题目,需要利用位与运算来计算一个整数的二进制表示中有多少个1。 11. 数值的整数...

    sword-for-offer:使用Python3用优雅的方式实现《剑指Offer》中的题目

    使用Python3用pythonic的方式实现《剑指Offer 第二版》中的题目。拒绝直接“翻译”java等实现。代码有些并非原创,搬运了一些LeetCode中大神的优秀解法,比如:如何用一行代码实现顺时针打印矩阵。 基本所有题都包含...

Global site tag (gtag.js) - Google Analytics