package Basic;
public class Fib {
public static void main(String[] args) {
int N = 50;
long t1 = System.currentTimeMillis();
long c = F(N);
long t2 = System.currentTimeMillis();
System.out.println("running time is:"+(t2-t1)+"ms.");
System.out.println(c);
}
public static long F(int n) {
// TODO Auto-generated method stub
if(n == 0){
return 0;
}
if(n == 1){
return 1;
}
return F(n-1) + F(n-2);
}
}
保存中间值:
package Basic;
public class Fib1 {
static int N = 50;
static long[] a = new long[N];
public static void main(String[] args) {
a[0] = a[1] = 0;
long t1 = System.currentTimeMillis();
long c = F(N);
long t2 = System.currentTimeMillis();
System.out.println("running time is:"+(t2-t1)+"ms.");
System.out.println(c);
}
public static long F(int n) {
// TODO Auto-generated method stub
if(n == 0) //终止条件
return 0;
if(n == 1) //终止条件
return 1;
if(a[n-1] != 0) //如果有 就直接用
return a[n-1];
a[n-1] = F(n-1) + F(n-2); //计算某一次n的结果保存在数组中
return a[n-1];
}
}