当然, 这里需要优化,空间换时间。
public class Steps {
public int invokeTimes;
private int[] a;
public Steps(int n){
assert(n>0);
a = new int[n+1];
}
public int f(int n){
invokeTimes++;
if(a[n] > 0){
return a[n];
}
if(n == 1){
return 1;
}else if(n == 2){
return 2;
}
int count = f(n-1) + f(n-2);
a[n] = count;
return count;
}
/**
* @param args
*/
public static void main(String[] args) {
Steps s = new Steps(30);
int count = s.f(30);
System.out.println(count);
System.out.println(s.invokeTimes);
}
}