【软考】数据结构与算法基础 - 常见的算法设计思想(递归与暴力递归)

一、递归是什么?

递归是一种算法设计思想

二、递归算法的核心思想

递归通过将问题分解为更小的子问题来解决问题,然后通过解决这些子问题来得到原问题的解决方案。

递归指的是把问题转化为规模缩小的同类问题的子问题,有明确的不需要继续进行递归的条件(base case),当得到了子问题的结果之后的决策过程,不记录每一个子问题的解。递归中出现重复计算时,为了快捷需要将算过的值保存到缓存表里。

三、暴力递归是什么?

暴力递归是一种特殊的递归方式
暴力递归大多数是体现在蛮力枚举的方式

四、暴力递归的核心思想

暴力递归通过不断枚举各种可能的解,并递归地验证这些解是否符合问题的要求。

暴力递归将问题转化为规模缩小的同类问题的子问题,且有明确的不需要继续进行递归的条件(base case),当得到了子问题的结果之后的决策过程,不记录每一个子问题的解。

五、递归 和 暴力递归的使用注意事项

递归算法的效率很低,因为它会重复计算许多子问题。在实际应用中,通常会使用更高效的算法来求解类似的问题,例如动态规划。

暴力递归通常适用于问题的解空间有限,且枚举的代价不大,而求解的精度要求不高的情况。然而,暴力递归的效率往往较低,特别是当问题的解空间较大时。因此,在实际应用中,需要结合具体问题进行分析和设计,选择合适的算法策略和优化方式,以提高算法的效率和性能。

六、递归的常见应用

6.1 求解斐波那契数列。

下面是一个使用递归的 Java 代码示例:

public static int fibonacci(int n) {
    
    
    if (n <= 1) {
    
    
        return n;
    } else {
    
    
        return fibonacci(n-1) + fibonacci(n-2);
    }
}

这个函数使用递归来计算斐波那契数列的第 n 项。
如果 n 小于或等于 1,函数直接返回 n。
否则,函数调用自身来计算前两个斐波那契数列项的和,然后返回这个值。

6.2 汉诺塔问题

6.3 八皇后问题

6.4 牛吃草问题

6.5 扑克牌问题

6.6 字符串全排

猜你喜欢

转载自blog.csdn.net/wstever/article/details/132133427
今日推荐