java算法题。求斐波拉契第N项

etdeng 2014-12-10 03:37:12
编制一段程序,计算斐波拉契级数第N项的值。
斐波那契级数:f(0)=0;f(1)=1;
当n>1时,f(n)=f(n-1)+f(n-2)

用普通方法,计算100以内还是很快的。
如果考虑算法的时间效率,计算10000呢?请大神们用java提供一种快速的算法
...全文
369 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yubinyuleo 2015-03-20
  • 打赏
  • 举报
回复
计算第n项是有O(logn)的算法的
Sky丶Memory 2014-12-11
  • 打赏
  • 举报
回复
矩阵快速幂,google一下。。。。
Sky丶Memory 2014-12-11
  • 打赏
  • 举报
回复
矩阵快速幂,google一下。。。。
Sky丶Memory 2014-12-11
  • 打赏
  • 举报
回复
矩阵快速幂,google一下。。。。
etdeng 2014-12-11
  • 打赏
  • 举报
回复
度娘了 ,没有java的矩阵快速幂
etdeng 2014-12-10
  • 打赏
  • 举报
回复
或者另一种方法 用矩阵乘法如何呢?
etdeng 2014-12-10
  • 打赏
  • 举报
回复
楼上的大哥 ,代码能贴出来么
kerbcurb 2014-12-10
  • 打赏
  • 举报
回复
x1 = (-1 - sqrt(5))/2; x2 = (-1 + sqrt(5))/2 Fn = ((-x1)^(n+1)-(-x2)^(n+1))/sqrt(5)
kosora曹 2014-12-10
  • 打赏
  • 举报
回复
引用 2 楼 etdeng 的回复:
[quote=引用 1 楼 SmallYamateh 的回复:] 这个没什么难的吧?3个变量就行了啊

public class Fbnq {

	public static int fbnq(int n){
		if(n==0){
			return 0;
		}else if(n==1){
			return 1;
		}else{
			int a=0;
			int b=1;
			int c=a+b;
			for(int i=2;i<=n;i++){
				c=a+b;
				a=b;
				b=c;
			}
			return c;
		}
	}
	public static void main(String[] args) {
		System.out.println(fbnq(100000));

	}

}
计算第100000个数,必须要用long型。或者java里的BigInteger 了吧?你这个结果不对。 而且如果再往后一点,时间效率就跟不上了。c语言里有很多用矩阵乘法来计算的。[/quote] 那就改成long呗。为什么效率跟不上呢?正常计算斐波那契数列是无法突破O(N)的上限的,除非用通项公式来计算,可以达到O(1)的复杂度,但是没有哪个面试官希望应聘者用通项公式计算。
etdeng 2014-12-10
  • 打赏
  • 举报
回复
引用 1 楼 SmallYamateh 的回复:
这个没什么难的吧?3个变量就行了啊

public class Fbnq {

	public static int fbnq(int n){
		if(n==0){
			return 0;
		}else if(n==1){
			return 1;
		}else{
			int a=0;
			int b=1;
			int c=a+b;
			for(int i=2;i<=n;i++){
				c=a+b;
				a=b;
				b=c;
			}
			return c;
		}
	}
	public static void main(String[] args) {
		System.out.println(fbnq(100000));

	}

}
计算第100000个数,必须要用long型。或者java里的BigInteger 了吧?你这个结果不对。 而且如果再往后一点,时间效率就跟不上了。c语言里有很多用矩阵乘法来计算的。
kosora曹 2014-12-10
  • 打赏
  • 举报
回复
这个没什么难的吧?3个变量就行了啊

public class Fbnq {

	public static int fbnq(int n){
		if(n==0){
			return 0;
		}else if(n==1){
			return 1;
		}else{
			int a=0;
			int b=1;
			int c=a+b;
			for(int i=2;i<=n;i++){
				c=a+b;
				a=b;
				b=c;
			}
			return c;
		}
	}
	public static void main(String[] args) {
		System.out.println(fbnq(100000));

	}

}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧