先写出暴力递归解法:


                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;