分而治之和递归

学堂在线 邓老师《数据结构》笔记
分而治之:把大问题分成小问题,递归式求解

为求解一个大规模问题,可以将其划分为若干(通常两个)子问题,规模大体相当。分别求解子问题。由子问题的解,得到原问题的解。

数组求和:

sum(int A[],int lo,int hi){
    if(lo==hi) return A[lo];//递归的一个判断条件
    int mi=(lo+hi)>>1;
    return sum(A,lo,mi)+sum(A,mi+1,hi);
    
}

减而治之:

求解一个大规模问题,可以将其划分为两个子问题:其一平凡(1个数的问题),另一个可能和原问题相似,但是规模缩减(可以递归)。

分别求解子问题,由子问题的解,得到原问题的解。

递归的两种表现形式:

  • 递归跟踪:

    直观形象,仅适用于简明的递归模式

  • 递归方程:

    间接抽象,适用于复杂的递归模式

eg:数组倒置问题:

问题 lo-hi -> lo+1,hi-1

void reverse(int*A ,int lo,int hi){
if(lo<hi){
    swap(A[lo],A[hi]);
    reverse(A,lo+1,hi-1);
}else if(){//用于考虑特殊情况,边界情况
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕...
    五分钟学算法阅读 2,021评论 1 34
  • 凡治众如治寡,分数是也。 解决规模庞大的问题的有效方法之一,就是将其分解为若干规模更小的子问题,再通过递归机制分别...
    不高兴325阅读 1,276评论 0 0
  • 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题...
    Java资讯库阅读 9,874评论 0 14
  • 最近在读< >时,了解到了很多常用的排序算法,故写一篇读书笔记记录下这些排序算法的思路和实现. 冒泡排序 冒泡排序...
    SylvanasSun阅读 809评论 0 0
  • 今年,辽宁队一定要为杨队拿一个总冠军,因为明年杨队就是杨指导了!12年前扬手听京骂,断腕耀京城。12年后,少年不再...
    婴木花道阅读 3,789评论 0 0

友情链接更多精彩内容