先写出暴力递归算法:

int ff(int n)
{
	if (n >2)
	{
		return ff(n - 1) + ff(n - 2);
	}
	else
	{
		return 1;
	}
}

然后根据递归式,将其转换为 DP(动态规划),采用自底向上的方式逐步递推出下一个状态。由于 n<=2 时结果均为 1,因此将该范围内的所有状态初始化为 1:

	int *arr = new int[  60];
	memset(arr, 0, (sizeof (int))*(60));

	arr[0] = 1;
	arr[1] = 1;
	arr[2] = 1;
	for (int i = 3; i <= 10; i++)
	{
		arr[i] = arr[i - 1] + arr[i - 2];
	}
	cout << arr[10];