[算法][递归]求阶乘

这道题是最简单的递归问题,这里探讨两个问题:
递归和非递归的转换
任何一个递归过程都可以改为非递归,递归的描述逻辑是从后往前的,f(n)依赖f(n-1)的结果,f(n-1)依赖f(n-2)的结果...以此类推,但是非递归的逻辑是从前往后的,递归改非递归,就是要往前找到不依赖任何项的第一项,再改成(一般是这个思路)for()循环的形式

递归和动态规划的关系
其实动态规划就是把每一次递归结果都记录下来的递归,也是用空间换时间,f(n)项只依赖f(n-1)项或前面的有限项;而递归每次是不记录解的

package basic_class_07;

//求n阶乘的结果
public class Code_01_Factorial {
    public static long getFactorial1(int n) {
        if (n == 1) {
            return 1L;
        }
        return (long) n * getFactorial1(n - 1);
    }

    public static long getFactorial2(int n) {
        long result = 1L;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    public static void main(String[] args) {
        int n = 5;
        System.out.println(getFactorial1(n));
        System.out.println(getFactorial2(n));
    }

}

猜你喜欢

转载自www.cnblogs.com/kristse/p/12361206.html