对一个规模为n的问题,若该问题可以容易地解决(比如n较小)则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解决这些子问题,然后将各子问题的解合并得到原问题的解
分解、解决、合并
在运行的过程中调用自己
c++// 斐波那契数列递归求解
int F(int n)
{
if(n == 0) return 1;
if(n == 1) return 1;
if(n > 1) return F(n - 1) + F(n - 2);
}
javascript/**
* L: 要查找的数列
* a, b: 要查找的区间范围起点和终点
* x: 要查找的值
*/
function Binary_Search(L, a, b, x) {
if (a > b) {
return (-1)
} else {
const m = (a + b) / 2;
if (x === L[m]) {
return m
} else if (x > L[m]) {
return Binary_Search(L, m + 1, b, x)
} else {
return Binary_Search(L, a, m - 1, x)
}
}
}
是一种深度优先的搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。
适用于迷宫问题
总是做出在当前来说是最好的选择,而并不从整体上加以考虑,它所做的每步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择
不必为了寻找最优解而穷尽所有可能解,耗费时间少,但得不到最优解
解决背包问题
在求解问题中,对于每一步决策,列出各种可能的局部解,再依据某种判定条件,舍弃那些肯定不能得到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局是最优解
动态规划一般要用到查表
推荐题目:力扣打家劫舍
两种策略都不能确保得到最优解
本文作者:Morales
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!