簡體   English   中英

Java 中的遞歸 - 打印字符串排列

[英]Recursion in Java - print string permutations

我正在嘗試編寫一種使用遞歸打印字符串的所有排列的方法。 現在,我有這段有效的代碼:

private static void printPermutations(String in, String out) {
    if (in.length() == 0) System.out.println(out);
    else {
        for (int i = 0 ; i < in.length() ; i++) {
        printPermutations(in.substring(0, i) + in.substring(i + 1), out + in.charAt(i));
    }
    }
}

它打印出正確的結果,但我試圖在不使用循環的情況下解決它,包括第 4 行中的循環。這可能嗎? 如果是這樣,你會如何解決? 謝謝!

我試圖在第 5 行的遞歸調用中添加名為 index 的第三個參數並寫入 index+1 但它沒有用。 我認為添加第三個參數是個好主意,我只是不確定如何使用它。

所以我不確定你為什么要這樣做..這是你將為遞歸做的一種設置,你不需要返回 void 否則它不是真正的遞歸。 w3schools是一個很好的資源。

 public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result); } public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0; } } }

這會返回類似

10 + sum(9) 10 + ( 9 + sum(8) ) 10 + ( 9 + ( 8 + sum(7) ) )... 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0) 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

我希望這能幫助你把你需要的東西放在一起。 您必須有一個返回,這樣遞歸方法才能看到它之前的調用,它會像橡皮筋一樣獲取信息,一旦到達某個點,它就會返回所有迭代。 就個人而言,我更喜歡循環,更易於閱讀和編寫代碼。

您要執行的操作的實現是:

public class Main {
  public static void main(String[] args) {
    String result = Variations("test");
    System.out.println(result);
  }
  public static String Variations(String k) {
    if (k.length() > 0) {
      return k + k.substring(0, k.lenth() - 1);
    } else {
      return "";
    }
  }
}

我相信那將是您想要做的事情的變體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM