[算法][递归]求阶乘

这道题是最简单的递归问题,这里探讨两个问题:
递归和非递归的转换
任何一个递归过程都可以改为非递归,递归的描述逻辑是从后往前的,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));
	}

}

posted @ 2020-02-25 13:10  KrisTse  阅读(542)  评论(0编辑  收藏  举报