【问题标题】:Returning changes variable (Java)返回更改变量(Java)
【发布时间】:2017-10-10 21:23:28
【问题描述】:

我有下面的代码,它的功能如下:你调用方法并给它一个数字。它会打印出你给它的数字的所有排列。

例如:你调用这样的方法:

排列(3)

它会打印出来:

123、132、213、231、312、321、

代码如下:

public static void main(String[] args) {
    permutations(3);
}

public static void permutations(int n) {
    boolean used[] = new boolean[n];  //all set to false by default
    int perm[] = new int[n];
    permutations2(used, 0, perm);
}

private static void permutations2(boolean used[], int index, int perm[]) {
    if (index == used.length) {
        for (int i = 0; i < perm.length; i++) {
            System.out.print(perm[i] + "");
        }
        System.out.print(", ");
        return;
    }

    for (int i = 0; i < used.length; i++) {
        if (!used[i]) {
            used[i] = true;
            perm[index] = i + 1;
            permutations2(used, index + 1, perm);
            used[i] = false;
        }
    }

}

我的问题是返回声明。每当由于某种原因调用返回时,变量“索引”就会发生变化。谁能向我解释为什么会这样?代码工作正常,我只是很难理解如何。

抱歉英语不好。

【问题讨论】:

  • 这是一个递归算法,因此index 的新值作为参数被压入堆栈,但对于调用者,该值保持不变。提示:在你的 IDE 中在递归调用之前设置一个断点,看看函数是如何变得更深然后返回的。
  • 它不会改变。如果您可以准确地说明是什么让您认为它确实如此,我们也许可以解释。请记住,您多次调用同一个函数,堆叠在自身上,并且每个函数都有自己的变量副本。
  • 'index' 的值不会改变,只要你不给它赋值就不会改变!

标签: java return


【解决方案1】:

permutations2 是一个递归函数,你在 index + 1 上递归调用它。

当达到递归基本情况时,即 index == used.length,return 被调用,代码将递归调用一次,返回到 index 小一时。

【讨论】:

    猜你喜欢
    • 2013-04-08
    • 2018-08-26
    • 2016-04-06
    • 1970-01-01
    • 2021-02-11
    • 2015-12-08
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多