斐波那契是第一项为0,第二项为1,以后每一项是前面两项的和的数列。
源码:Fibonacci.java
public class Fibonacci{
private static int times=0;
public static void main(String args[]){
int nums = fibonacci(30);
System.out.println("结果:"+nums);
System.out.println("次数:"+times);
}
static int fibonacci(int n){
times++;
if(n<=1) return 1;
return fibonacci(n-1)+fibonacci(n-2);
}
}
求第三十项的时候。调用了函数2692539次,效率及其低
第二种的优化算法是
利用hashmap记录下每次运算的值,动态规划地输出每次的结果。
第三十项仅仅调用59次。
源码:Hash.java
import java.util.HashMap;
public class Hash{
public static void main(String args[])
{
HashMap m = new HashMap();
int res = Fib(30, m);
System.out.println("结果:"+res);
System.out.println("次数:"+times);
}
private static int times = 0;
public static int Fib(int x,HashMap m)
{ times++;
if (m.containsKey(x))
return (Integer) m.get(x);
else
if(x==0||x==1)
return 1;
int temp = Fib(x-1,m)+Fib(x-2,m);
m.put(x, temp);
return temp;
}
}原文:http://www.cnblogs.com/ilsk/p/4137929.html