分治策略与递归

分治策略

基本思想:将一个难以解决的规模大的问题,分解成一些规模较小的相同问题
           大规模-------->小规模
一定要把问题规模降低到1,或者0时给出具体的求解方案。

递归:分治策略与递归像孪生兄弟,经常应用于算法设计中。
循环与递归:任何单一性的循环可以改为递归,任何单一性的递归也都可以改为循环。

下面我们看几个例子:
1.求1-n的阶乘
在这里插入图片描述
若要算1-n的阶乘需要知道1到(n-1)的值 * n
在这里插入图片描述
若要算出x的值,需要算1到(n-2)的阶乘乘(n-2)
在这里插入图片描述
最终依次将问题的规模降低。为此我们给出两种方案来解决:
①:循环解决
在这里插入图片描述
②递归解决(不断缩减问题的规模):
在这里插入图片描述
在这里插入图片描述
2.求第n位斐波那契数列
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
①循环解决(时间复杂度为O(n))
在这里插入图片描述

②递归解决(时间复杂度为O(2^n))
在这里插入图片描述
//如何改进斐波那契数列,使它的时间复杂度和循环的时间复杂度逼近

3.二分查找
适用场景:
      1.有序
      2.顺序表(向量)

①循环解决
在这里插入图片描述
优化一:防止数据超出整型范围:left+right过大时防止出现超过int范围
在这里插入图片描述
在这里插入图片描述
优化二:如果出现该数组:12 12 12 12 12 23 34 45 56 56 56 56 56 67 78 89 90 100,我们想找到最左端的12,上述方法可能存在越界问题,最左端的12可能会越界
在这里插入图片描述
在这里插入图片描述
②递归解决
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值