斐波那契数一般都是采用递归来予以实现的,但是这存在一个严重的问题——即使在相对较快的计算机上,计算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)) ;
}
}
分享到:
相关推荐
总结来说,"斐波那契数.rar"文件可能包含了一个使用C语言编写的程序,该程序利用循环或其他高效方法实现了斐波那契数列的计算。学习这个程序可以帮助我们理解如何在C语言中实现算法,以及如何优化代码以提高效率。...
逆序对的数量可以反映出数组的有序程度,是许多算法问题的基础,如快速排序、归并排序等的分析。 树状数组,又称为线段树,是一种数据结构,主要用于处理区间查询和区间更新的问题。它的核心思想是将线性数组划分成...
不同于线段树,树状数组利用位运算,将数组元素的索引转换为其在二进制表示下的最后一个非零位的权重,从而实现快速的区间求和。树状数组的主要优点是实现简单,代码量小,同样具有O(logn)的查询和更新时间复杂度。...
4. **基于矩阵乘法的公式**:根据《算法导论》2.5.2章节,可以利用矩阵快速幂的方法计算斐波那契数,其时间复杂度远低于递归和迭代,大约为O(logN)。 实验要求还包括: - 设计用户界面,最好为图形化,方便用户...
本文在 C++ 中实现斐波那契数列算法有几种常见的方法; 递归算法 : 简单易懂,但效率低,因重复计算大量子问题。 迭代算法 :通过循环计算,避免了递归的重复计算,效率更高。 动态规划算法 : 利用数组存储计算...
3. **矩阵快速幂**:利用矩阵乘法和快速幂的方法可以进一步优化Fibonacci数列的计算过程,特别适用于求解非常大的数列项。 4. **实际应用**:Fibonacci数列在自然界中的出现十分广泛,如植物的花瓣数目、螺旋结构等...
这个压缩包文件“树状数组资料”很可能包含了关于树状数组的理论介绍、实例解析、代码实现以及相关的练习题目。 树状数组的核心思想是将一个数组转化为一棵完全二叉树,每个节点存储了其对应子数组的某个聚合信息,...
015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...
在编程中,实现斐波那契序列通常涉及时间和空间效率的问题。"fibonacci程序并且计算时间"这个描述暗示了我们将关注一个特定的斐波那契序列算法的性能,尤其是执行时间。这通常涉及到算法分析,包括时间复杂度和可能...
总之,斐波那契数列是一个基础的数学概念,而用汇编语言实现斐波那契数列计算则展示了低级编程语言的灵活性和对硬件的直接控制能力。尽管递归在某些情况下直观易懂,但在处理大规模计算时,往往需要考虑效率和内存...
在Java中实现斐波那契数列的前n项和,我们通常会采用几种不同的方法,每种方法都有其优缺点。下面将详细介绍这几种实现方式: 1. **递归法**: 这是最直观的方法,但效率最低。递归公式为F(n) = F(n-1) + F(n-2)。...
在C++中实现斐波那契数列,特别是要处理大数运算,涉及到的关键知识点包括: 1. **斐波那契数列**:斐波那契数列是一个递归序列,定义为F(0) = 0,F(1) = 1,后续的每个数都是前两个数的和,即F(n) = F(n-1) + F(n-...
2. **备忘录法**:利用数组存储已计算过的斐波那契数,避免重复计算。 3. **递归优化**:使用尾递归或自底向上的递归,减少计算次数。 4. **矩阵快速幂**:利用矩阵乘法的性质,将斐波那契数列的计算时间复杂度降低...
在C++中,我们可以使用递归的方式来实现斐波那契数列。如给定的代码所示,`fib`函数接受一个整数`n`作为参数,返回第`n`个斐波那契数。在函数内部,首先检查`n`是否小于3,因为前两个斐波那契数都是1。如果`n`小于3...
动态规划利用数组存储已计算的斐波那契数,避免了递归带来的效率问题。 4. **矩阵乘法**: 斐波那契数列还可以通过矩阵快速幂的方法高效计算。这种方法基于矩阵乘法的特性,可以在O(log n)的时间复杂度内求解第n...
斐波那契数列(Fibonacci Sequence)是数学中一个著名的数列,它的定义如下:第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是 F(1) = 1, F(2) = 1, F(n) = F(n-1) + F(n-2) (n >= 3...
2. **递归法**:利用函数自身调用自身的特点,通过递归的方式实现斐波那契数列。但是这种方法效率较低,因为会有很多重复的计算。 3. **动态规划**:保存已计算过的斐波那契数,避免重复计算,提高效率。这种方法在...
**矩阵快速幂**是另一个高级优化技术,它利用了斐波那契数列的矩阵形式来实现指数级别的计算速度。虽然实现起来较为复杂,但在处理大数目的斐波那契和时特别有效。 斐波那契数列求和问题还可以延伸到其他领域,比如...