暴力方法
public static int solve(int n) {
if (n <= 1) {
return 1;
}
return n * solve(n - 1);
}
暴力方法中含有大量的重复计算
自底向上
public static int solve(int n) {
int[] result = new int[n + 1];
if (n <= 1) {
return 1;
}
result[0] = 1;
for (int i = 1; i < result.length; i++) {
result[i] = result[i - 1] * i;
}
return result[n];
}
自顶向下
public class Solution {
/*
*自顶向下解法
*/
public static int[] result;
public static int solve(int n) {
if (result[n] >= 0) {
return result[n];
}
result[n] = solve(n - 1) * n;
return result[n];
}
public static int jiecheng(int n) {
if (n <= 1) {
return 1;
}
result = new int[n + 1];
result[0] = 1;
for (int i = 1; i < result.length; i++) {
result[i] = -1;
}
return solve(n);
}
public static void main(String[] args) {
System.out.println(Solution.jiecheng(5));
}
}