1.斐波那契数列算法
0 1 2 3 4 5
0 1 1 2 3 5 8 13 …
// O(2^n)
public static int fib1(int n) {
if (n <= 1) return n;
return fib1(n - 1) + fib1(n - 2);
}
// O(n)
public static int fib2(int n) {
if (n <= 1) return n;
int first = 0;
int second = 1;
for (int i = 0; i < n - 1; i++) {
int sum = first + second;
first = second;
second = sum;
}
return second;
}
public static int fib3(int n) {
if (n <= 1) return n;
int first = 0;
int second = 1;
while (n-- > 1) {
second += first;
first = second - first;
}
return second;
}
斐波那契的线性代数解法 – 特征方程
//斐波那契的线性代数解法 – 特征方程
public static int fib4(int n){
double c = Math.sqrt(5);
return(int)((Math.pow((1+c)/2,n)-Math.pow((1-c)/2,n))/c);
}
2.补充知识:时间复杂度
你永远想象不到我这个一天一道拖了多久