先写出暴力递归算法:
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];