【问题标题】:What is the answer to this recursive function?这个递归函数的答案是什么?
【发布时间】:2017-07-07 05:39:19
【问题描述】:

这是合并排序的方法:

    private void doMergeSort(int lowerIndex, int higherIndex) {

        if (lowerIndex < higherIndex) {

        int middle = lowerIndex + (higherIndex - lowerIndex) / 2;

        System.out.println("Lower index="+lowerIndex+"   Middle="+middle+ "   Higher index="+higherIndex);

        doMergeSort(lowerIndex, middle);

        doMergeSort(middle + 1, higherIndex);

        mergeParts(lowerIndex, middle, higherIndex);//never mind this method
    }
}

doMergeSort(0,9) 的输出如下所示:

    Lower index=0   Middle=4   Higher index=9
    Lower index=0   Middle=2   Higher index=4
    Lower index=0   Middle=1   Higher index=2
    Lower index=0   Middle=0   Higher index=1
    Lower index=3   Middle=3   Higher index=4//This line
    Lower index=5   Middle=7   Higher index=9
    Lower index=5   Middle=6   Higher index=7
    Lower index=5   Middle=5   Higher index=6
    Lower index=8   Middle=8   Higher index=9
    4 11 23 28 43 45 65 77 89 98 //never mind this part too

输出的第 4 行(标有注释)是如何产生的?请解释一下。

【问题讨论】:

  • 这是从doMergeSort(0,4) 进行的第二次递归调用:middle 计算为 2,因此您调用 (0,2) 和 (3,4)。为什么你有这个问题?
  • 您在单步执行代码时遇到问题吗?如果在 println 处设置断点,则可以在打印该特定行时看到递归的调用堆栈。
  • @jasonharper 那么这是否意味着函数 doMergeSort(0,4) 和 doMergeSort(3,4) 都是同时执行的?

标签: java sorting recursion data-structures computer-science


【解决方案1】:

这是您的代码控制流的图解表示,它将帮助您消除疑问。

【讨论】:

  • 我明白了,但为什么 func(5,9) 不作为 func(0,4) 的兄弟执行?
猜你喜欢
  • 2015-12-29
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2020-06-27
相关资源
最近更新 更多