先写出暴力递归解法:


int f(int n)
{
	if (n > 1)
	{
		return f(n - 1)*n;
	}
	else
		return 1;
}

然后将其转换为 DP 方案:保存已递归过的状态,自底向上按照递推式推导出下一个状态。

arr[0] = 1;
	arr[1] = 1;

	for (int i = 2; i <= 4; i++)
	{
		arr[i] = arr[i - 1]*i;
	}
	cout << arr[4] << endl;