简单的中点递归

3wabscal  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(297)

我正在写一个简单的中点计算递归:

public static void main(String[] args) {
        int[] array = {0, 1, 2, 3, 4, 5, 6};
        midPoint(0, array.length - 1, array);
    }

    private static void midPoint(int start, int end, int[] array) {
        int mid = (start + end) >>> 1;

        if (start == end) return;

        midPoint(start, mid, array);
        midPoint(mid + 1, end, array);      

    }

这段代码运行良好,但如果我将最后两行改为:

midPoint(start, mid - 1, array);
        midPoint(mid, end, array);

然后代码进入无限递归并导致堆栈溢出。在打印了这些值之后,我意识到,在以后,我意识到 midPoint(1, -1, array) 进入这种情况,但概念上我不明白,即在编写代码时,我如何认识和避免这种情况而不必调试?

rvpgvaaj

rvpgvaaj1#

最终该方法将被调用 0 作为起点和终点 1 作为结束。 mid0 也一样,但条件 (start == end) 会是假的。
方法 midPoint(0, 0-1, array); 威尔打电话来 (start == end) 永远不会是真的,方法会无限次地调用自己。
我不明白你的代码点是什么,但也许你应该把它改成 (start >= end)

相关问题