1、动态规划
2、递归
3、迭代
public class Main {
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(f(36, new int[37]));
long b = System.currentTimeMillis();
System.out.println("运行时间:" + (b - a));
a = System.currentTimeMillis();
System.out.println(f2(36));
b = System.currentTimeMillis();
System.out.println("运行时间:" + (b - a));
a = System.currentTimeMillis();
System.out.println(f3(36));
b = System.currentTimeMillis();
System.out.println("运行时间:" + (b - a));
}
// 迭代
public static int f3(int n) {
if (n == 1 || n == 2) {
return 1;
}
int first = 1, second = 1;
for (int i = 3; i <= n; i++) {
int temp = second + first;
first = second;
second = temp;
}
return second;
}
// 递归
public static int f2(int n) {
if (n == 1 || n == 2) {
return 1;
}
return f2(n - 1) + f2(n - 2);
}
// 动态规划
public static int f(int n, int[] a) {
if (n == 1 || n == 2) {
return 1;
}
if (a[n] != 0) {
return a[n];
}
return a[n] = f(n - 1, a) + f(n - 2, a);
}
}