递归与递推 & 动态规划、递推、贪心和搜索
2017-03-27 18:58
344 查看
(1)递推与递归:
1,从程序上看,递归表现为自己调用自己,递推则没有这样的形式。
2,递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题
是逆向的。递推是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。
3,递归中,问题的n要求是计算之前就知道的,而递推可以在计算中确定,不要求计算前就知道n。
4,一般来说,递推的效率高于递归(当然是递推可以计算的情况下)
例子如下面的斐波那契数列:
总结成公式就是F(n+1)=F(n)+F(n-1), F(0)=F(1)=1;
你可以用递归的方法写这个函数:
int F(int n) {
if (n<2) return 1;
else return F(n-1)+F(n-2);
}
但也可以用递推的方式:
int F(int n) {
if (n<2) return 1;
int f0=1, f1=1, f;
for (int i=0; i<n-1; i++) {
f=f0+f1;
f1=f; f0=f1;
}
}
(2)递推、贪心、搜索和动态规划
参考:https://www.zhihu.com/question/23995189
一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式来决定的。
每个阶段只有一个状态->递推
每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心
每个阶段的最优状态可以从之前的某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划
每个阶段的最优状态是由之前所有阶段的组合得到->搜索
ac21
1,从程序上看,递归表现为自己调用自己,递推则没有这样的形式。
2,递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题
是逆向的。递推是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。
3,递归中,问题的n要求是计算之前就知道的,而递推可以在计算中确定,不要求计算前就知道n。
4,一般来说,递推的效率高于递归(当然是递推可以计算的情况下)
例子如下面的斐波那契数列:
总结成公式就是F(n+1)=F(n)+F(n-1), F(0)=F(1)=1;
你可以用递归的方法写这个函数:
int F(int n) {
if (n<2) return 1;
else return F(n-1)+F(n-2);
}
但也可以用递推的方式:
int F(int n) {
if (n<2) return 1;
int f0=1, f1=1, f;
for (int i=0; i<n-1; i++) {
f=f0+f1;
f1=f; f0=f1;
}
}
(2)递推、贪心、搜索和动态规划
参考:https://www.zhihu.com/question/23995189
一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式来决定的。
每个阶段只有一个状态->递推
每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心
每个阶段的最优状态可以从之前的某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划
每个阶段的最优状态是由之前所有阶段的组合得到->搜索
ac21
相关文章推荐
- 递归,递推,分治,贪心,动态规划......
- 动态规划初步_数字三角形(递归,递推,数字化搜索)
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
- 贪心&动态规划
- 递归 vs. 迭代 & 动态规划
- 递推,贪心,动态规划
- 贪心、递归、递推以及动态规划算法的分析与对比
- 分治与递归、动态规划、贪心
- 斐波拉契数列=>多种方法的比较(分治、递归、动态规划/递推)
- 斐波那契数列 递推 递归 备忘录 动态规划
- 【贪心专题】POJ 2456 Aggressive cows && NYOJ 586 疯牛(最大化最小值 贪心+二分搜索)
- leetcode :316 Remove Duplicate Letters : 贪心+递归搜索
- 多校第九场:贪心+矩阵快速幂中间优化+线性递推&线段树递推
- HDU 4004 The Frog's Games(基本算法-贪心,搜索-二分)
- Problem 1567 - D - Sloth's Angry ( 递归+贪心)
- silktest&nbsp;通过递归实现文件搜索的…
- 五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)
- 贪心、递归、递推以及动态规划算法的分析与对比
- 第二周测试综合(递推和贪心)AA - FatMouse' Trade
- 穿过街道(递归OR递推)(搜索)