方法一:迭代法
public static int iteration (int n) {
int ret = 1;
for (int i=1;i <= n;i++){
ret *= i;
}
return ret;
}
方法二:递归法
- 首递法
public static int headRecursion (int n) {
return 1==n?1:n*headRecursion(n-1);
}
- 尾递法
public static int tailRecursion (int n) {
return factorialHelper(1,n);
}
private static int factorialHelper (int acc, int n) {
return 1==n?acc:factorialHelper(acc*n,n-1);
}
方法三:函数流
public static int stream (int n) {
return IntStream.rangeClosed(1,n).reduce(1,(a,b)->a*b);
}