归并排序中的递归:两次递归调用

2024-05-19

private void mergesort(int low, int high) {     //line 1
if (low < high) {                               //line 2
    int middle = (low + high)/2 ;               //line 3
    mergesort(low, middle);                     //line 4
    mergesort(middle+1, high);                  //line 5
    merge(low, middle, high);                   //line 6
}}                                              //line 7

我了解这样一个事实:当 if 语句为 false 时,您将退出方法/函数。例如,如果我打电话mergesort(0, 5)在 main 方法中第一个mergesort(low, middle)将运行3次并终止,然后程序将转到第7行。

我感到困惑的是为什么high当程序返回时突然从0变成1mergesort(middle+1, high);在第 5 行。

这是另一个类似但更简单的程序的示例

public static void recursionExample(int i){      //line 1
    if(i < 3){                                   //line 2
        recursionExample(i+1);                   //line 3
        recursionExample(i-1);                   //line 4
    }                                            //line 5 
}                                                //line 6

这次如果我打电话recursionExample(0)3号线的recursion(i+1);会运行3次,直到if语句为假,然后会转到第6行,然后程序会转到第4行recursion(i-1);然而,i当它从第6行转到第4行时,突然从3变成2。这是我觉得最困惑的地方。为什么调用第二个递归方法时i会变成2。


关于你的第二个片段:

public static void recursionExample(int i){     
    if(i < 3){                                 
        recursionExample(i+1);  // this is called for the last time when i==2, i.e. the
                                // last call is recursionExample(3). When that call 
                                // returns, i is still equal 2, since calling  
                                // recursionExample(i+1) doesn't change the value of the
                                // local variable i of the current method call

        recursionExample(i-1);  // Therefore when this line is first called, i is equal 2
    }                                         
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

归并排序中的递归:两次递归调用 的相关文章

随机推荐

  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • 如何让 vsCode 了解自动补全的深度依赖导入?

    我创建了多个角度库 让我可以使用一堆组件更快地创建网站 例如 sidenav 卡片 我创建了一个 超级库 来导入所有这些库 这样我就可以使用npm i myWebsiteBundle立即下载所有依赖项 我已将每个类似的插件列入白名单ng p
  • NodeJS hmac 摘要问题与重音

    我正在对以下代码与 Ruby PHP 和 NodeJS 进行并排比较 使用 NodeJS 得到错误的响应crypto module PHP hash hmac sha256 text Ruby OpenSSL HMAC hexdigest
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 如何计算在一定距离内达到一定速度所需的减速度?

    我已经尝试过典型的物理方程 但它们都不起作用 因为这些方程处理恒定的加速度 而我的方程需要改变才能正常工作 基本上 我有一辆车可以以很大的速度行驶 并且在到达路径终点时需要在给定的距离和时间内减速并停止 所以我有 V0 或当前速度 Vf 或
  • 如何获取所有喜欢 Facebook 帖子的人?

    我有脸书post https www facebook com Eventinarea posts 336638873112346 我可以点击 77 人这样 并获得我需要的所有人员 问 有没有办法通过FB API获取这些人 PS 我想从这些
  • jQuery 悬停时滚动到 div 并返回到第一个元素

    我基本上有一个具有设定尺寸的 div 和overflow hidden 该 div 包含 7 个子 div 但一次只显示一个 我希望当它们各自的链接悬停时能够平滑地垂直滚动 但是 第一部分 div 没有链接 并且是没有悬停链接时的默认部分
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • 如何读取 Fortran 中内容不以空格分隔的 2D 文件

    我有一个矩阵存储在文件 number txt 中 如下所示 12323456 54254311 76534522 我如何在 Fortran 中读取这样的矩阵 结果将是 1 2 3 2 3 4 5 6 5 4 2 5 4 3 1 1 7 6
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 如何减少典型 iPhone 应用程序的启动时间?

    需要明确的是 这是一个普通的 iPhone 应用程序 而不是游戏 我在网上读过几次 一些开发人员提到他们正在努力改进 减少应用程序的启动时间 但从来没有提供任何关于如何做到这一点的良好背景信息 那么问题很简单 如何减少 iPhone 应用程
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • Twitter bootstrap 3表单水平和单行多个输入列

    我需要将多列输入放在单行中 如下所示 我通过将多个输入分组为一个来做到这一点form group 但是这样我不能使用has error class div class form group div
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l