1. 题⽬链接:509.斐波那契数
2. 题⽬描述:
3. 解法(暴搜->记忆化搜索->动态规划):
算法思路:
暴搜:
a. 递归含义:给dfs ⼀个使命,给他⼀个数n ,返回第n 个斐波那契数的值;
b. 函数体:斐波那契数的递推公式;
c. 递归出⼝:当n == 0 或者n == 1 时,不⽤套公式。
记忆化搜索:
a. 加上⼀个备忘录;
b. 每次进⼊递归的时候,去备忘录⾥⾯看看;
c. 每次返回的时候,将结果加⼊到备忘录⾥⾯。
动态规划:
a. 递归含义->状态表⽰;
b. 函数体->状态转移⽅程;
c. 递归出⼝->初始化。
C++算法代码:
int memo[31]; // memory 备忘录
int dp[31];
int fib(int n)
{
// 动态规划
dp[0] = 0; dp[1] = 1;
for (int i = 2; i <= n; i++)
dp[i] = dp[i - 1] + dp[i - 2];
return dp[n];
}
// 记忆化搜索
int dfs(int n)
{
if (memo[n] != -1)
{
return memo[n]; // 直接去备忘录⾥⾯拿值
}
if (n == 0 || n == 1)
{
memo[n] = n; // 记录到备忘录⾥⾯
return n;
}
memo[n] = dfs(n - 1) + dfs(n - 2); // 记录到备忘录⾥⾯
return memo[n];
}