美文网首页
分治递归顺序 解析

分治递归顺序 解析

作者: KeDaiBiaO1 | 来源:发表于2017-09-25 16:12 被阅读0次

如有错误,希望各位同学指正
本文参考《算法:C语言实现 (1-4)》
递归的两个条件:
1 解决数学归纳
2 自身调用自己,需要结束条件
下面是一个简单的分治递归程序,用来获取数组中最大的值

public static int max(int[] a, int l, int r){
        int right = 0;
        int left = 0;
        int m = (r + l)/2;
        if(l == r){   //1  
            //结束条件   这个是划分到 左右两个值相等的时候  返回当前的值
            return a[l];
        }
        left = max(a, l, m);
        right = max(a, m + 1, r);
        //比较划分后 左右两边值的大小  并返回给  left和right
        if(right > left){
            return right;
        }
        else{
            return left;
        }
    }
    
    public static void main(String[] args) {
        int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        System.out.println(max(a, 0, 10));
    }

左边的执行顺序(右边的顺序类似)

max(0, 10)
  max(0, 5)
    max(0, 2)
      max(0, 1)
        max(0, 0)
        max(1, 1)
      max(2, 2)
    max(3, 5)
      max(3, 4)
        max(3, 3)
        max(4, 4)
      max(5, 5)
  max(6, 10)

需要注意的是 :
类似 max(x, x) 也就是2个数相等的地方,因为这个会执行到 标有1的地方,然后就会给left或者right赋值为a[x]。

首先分析一下分治递归的执行顺序
分治法是划分左右两边,每次都是先执行完左边然后再执行右边
1> 按上面的顺序执行到max(0, 0) (就是给left赋值为a[0])和max(1, 1)(给right赋值为a[1])
2> 然后left和right都有值之后就会往下比较2个值的大小 并把返回值(a[0]和a[1]中较大的值)赋值给left
3> 再然后执行max(2, 2)给right赋值为a[2]并赋值给right,然后比较left和right大小,较大值赋值给left。其他的值也是这样比较

相关文章

  • 分治递归顺序 解析

    如有错误,希望各位同学指正本文参考《算法:C语言实现 (1-4)》递归的两个条件:1 解决数学归纳2 自身调用自己...

  • 动态规划

    一、分治,回溯,递归,动态规划 1.1、递归的代码模板 1.2、分治(Divide & Conquer)的代码模板...

  • 分治、回溯

    分治和回溯本质上都是递归。 分治 Divide & Conquer 在计算机科学中,分治法是建基于多项分支递归的一...

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • 中序遍历(递归,分治,栈,Morrios)

    递归 分治 栈 Morrios 文章解释

  • 算法导论第2.3章 - 分治算法

    分治算法 递归:算法一次或多次递归地调用其自身已解决紧密相关的若干子问题。这些算法遵循分治法的思想。 分治算法三个...

  • 归并排序

    图解 思想:分治思想 分治思想是算法常用的思想。实现方式通常是递归。分治是一种解决问题的处理思想,递归是一种编程技...

  • 8.分治、回溯的实现与特性

    前言 分治与回溯,其实本质上就是递归,只不过它是递归的其中一个细分类。你可以认为分治和回溯最后就是一种特殊的递归,...

  • 递归与分治

    1| 棋盘覆盖问题 || 在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格...

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

网友评论

      本文标题:分治递归顺序 解析

      本文链接:https://www.haomeiwen.com/subject/cahdextx.html