斐波那契是第一项为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;
}
}