public class TestFib {
public static void main(String[] args) {
long n = 100l;
long t1 = System.currentTimeMillis();
long r1 = fib(n);
long t2 = System.currentTimeMillis();
//n到达一定大小之后,等待时间漫长到无法忍受,可能万物终点?
System.out.println("结果是: " + r1 + ", 耗时: " + (t2 - t1) + "MS");
//无论n多大,几乎都是0MS
long t3 = System.currentTimeMillis();
long r2 = fib2(n);
long t4 = System.currentTimeMillis();
System.out.println("结果是: " + r2 + ", 耗时: " + (t4 - t3) + "MS");
}
/**
* 普通方法:冗余计算次数过多,使其运算效率极低
* @param n
* @return
*/
public static long fib(long n) {
if(n==0l) {
return 0l;
} else if(n==1l) {
return 1l;
} else {
return fib(n-1) + fib(n-2);
}
}
/**
* 优化后的方法:基本无冗余计算,速度极快
* copy from Elminster in the forum of Java in Javaeye
* @param n
* @return
*/
public static long fib2(long n) {
long[] results = new long[(int)(n+1)];
for (long i = 0; i < results.length; i++) {
if(i==0l) {
results[(int)i] = 0l;
} else if(i==1l) {
results[(int)i] = 1l;
} else {
results[(int)i] = results[(int)(i-1l)] + results[(int)(i-2l)];
}
}
return results[(int)n];
}
}
分享到:
相关推荐
首先,让我们以斐波那契数列为例。这个数列在自然界中有着广泛的应用,例如植物的叶序、果实的排列等。在编程中实现斐波那契数列,通常需要用到循环结构。通过初始化两个变量`f1`和`f2`,分别表示数列中的前两个数,...
以计算斐波那契数列为例,其递归实现如下: ```python def fibonacci(n): if n <= 1: return n else: return fibonacci(n-1) + fibonacci(n-2) ``` 这个例子展示了递归的典型结构:基础条件(n )和递归调用...
《算法与数据结构:6-栈和队列3》主要讲解了栈和队列在实现递归中的应用,特别以斐波那契数列为例子进行了深入的阐述。斐波那契数列是一个典型的递归问题,其特点是每一项等于前两项之和。在讲解过程中,通过两种...
以斐波那契数列为例,改进后的代码如下: ```c int d[100]; // 用于存储斐波那契数列的数组 void init() { // 初始化数组 for (int i = 0; i ; i++) { d[i] = -1; // -1 表示该位置的值未被计算 } } int f(int ...
1. 初始化:设定源节点的距离为0,其他所有节点的距离为无穷大(通常用一个较大的整数表示),并创建一个优先队列(如二叉堆或斐波那契堆)用于存储节点和它们当前的距离。 2. 将源节点放入优先队列,并进行标记,...
这个例子展示了如何用Python实现一个简单的Level Queue,其中`queues`列表存储了10个子队列,每个子队列对应一个优先级。 总结来说,Level Queue是一种高效处理多优先级任务的数据结构,它结合了优先级队列和分层...
以斐波那契数列为例子,递推关系是:Fn = Fn-1 + Fn-2,其中Fn表示第n个月的兔子总数。基础情况是F1 = F2 = 1,因为兔子在第一个月和第二个月都只有一对。通过递推关系,我们可以计算出任何月份的兔子总数。 在C++...
以斐波那契数列为例子,其递归公式为 \(Fib(n) = Fib(n-1) + Fib(n-2)\)。通过解特征方程,我们可以得到斐波那契数列的时间复杂度分析。 非同质递归方程的求解更复杂,可能涉及多种方法,包括待定系数法或特征根法...