`
jw271052784
  • 浏览: 29459 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

利用数组快速实现斐波那契数

 
阅读更多

 

     斐波那契数一般都是采用递归来予以实现的,但是这存在一个严重的问题——即使在相对较快的计算机上,计算F40需要大约一分钟的时间,就运行时间而言,这是很荒谬的,因为基本运算只需要39次加法。

     根本问题是:递归历程执行了冗余计算,为了计算fib(n) ,我们递归的计算fib(n-1)。当递归使用另一个递归调用,我们计算fib(n-2)。不过,在计算fib(n-1)的过程中,我们早已计算了 fib(n-2),所以调用 fib(n-2) 是一种浪费,是冗余计算。对于N=40,F40=102334155,但是递归调用的总次数超过了300 000 000次!!!

    这里我采用数组实现斐波那契,速度相当的快,代码如下:相互运算时间的比较代码我就不具体贴出来了,很简单。有兴趣的可以用递归的方法与我的方法进行比较,结果一目了然。

 

/**
 * 使用数组利用循环快速实现斐波那契数
 * @author jw
 *
 */
public class Ftest {
   public static long fib(int n){
	  if(n<2){
		  System.out.println("必须输入大于2的数字");
		  return 0;
	  }		  
	 else{
		 int[] a=new int[n+1];	
		 a[0]=0;
		 a[1]=1;
		 for(int i=2;i<=n;i++){
			 a[i]=a[i-1]+a[i-2];
		 }
		 return a[n];
	 }	 
   }
   public static void main(String[] args){
	  System.out.println(fib(40)) ;
	  System.out.println(fib(1)) ;
	  System.out.println(fib(2)) ;
	  System.out.println(fib(10)) ;
	  System.out.println(fib(1000)) ;
   }
}
分享到:
评论

相关推荐

    C语言实例解析精粹

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    200个经典C程序【源码】

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    220个C语言程序源代码集合.zip

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C语言学习实例220例

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定...

    220个C语言程序源代码.zip

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    200个C程序.rar

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C语言经典源代码实例 数据结构 操作系统 图形等

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C语言源代码实例.rar

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    经典的C程序220案列

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    关于C的精粹包含至少200个C语言小程序

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C语言220例从易到难源代码

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C语言程序源代码(大集合).rar

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    200个经典C程序源码小游戏

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向...

    C语言常用算法

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    C 语言实例解析精粹(第二版)(书+盘)

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    220个C源代码 初学C语言必备

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

Global site tag (gtag.js) - Google Analytics