递归深度 - Java 中的制表符和凹痕

Recursion depth - tabs & dents in Java

我想格式化 Java 程序的输出,以便我可以看到 "how deep" 递归是什么。怎么做? 不要迷失在我的递归树中真的很重要。

示例输出(用于从 0 开始计算第 n 个数字的简单递归函数):

This is the first recursive call. Input value: 3.
    This is the second recursive call. Input value: 2.
        This is the 3rd recursive call. Input value: 1.
        Output value : 1.
    This is again the second recursive call. Input value: 2.
    Output value : 1 + 1.
This is again the first recursive call. Input value: 3.
Output value : 1 + 1 + 1.

好吧,如果您使用 System.out.println,那么您应该能够使用“\tThis is the...”来缩进大多数 java 输出中的行 windows.不过我不明白这是不是你要的。

如果您不知道自己在哪个递归中,那么您将不得不爬行 Thread.currentThread().getStackTrace()。

String s = "";
while(numRecursions --> 0) s += "\t";
System.out.println(s + "Something something something")

同样,如果您没有 numRecursions 变量,则必须执行类似这样的操作

    int numRecursions = 0;
    void a(){
        int temp = ++ numRecursions;
        String s = "";
        while(temp --> 0) s += "\t";
        System.out.println(s + "This is a recursion level");
        //code
        numRecursions--;
    }

您可以使用一个变量(如 level)来表示您的深度。它从 1 开始,并在每次递归调用时递增。

public static void main(String[] args) {
    function(3, 1);
}

public static String function(int input, int level) {
    String tab = "";
    for (int i = 0; i < level - 1; i++) {
        tab += "\t";
    }
    System.out.println(tab + "This is the " + level + " recursive call. Input value: " + input);
    if (input == 1) {
        System.out.println(tab + "Output value: 1");
        return "1";
    }
    String output = function(input - 1, level + 1);
    System.out.println(tab + "This is again the " + level + " recursive call. Input value: " + input);
    System.out.println(tab + "Output value: " + output + " + 1");
    return output + " + 1";
}

在您的输出函数中包含一个前缀字符串参数。
每次你调用你的函数时,都要传入前缀+“”。 示例:

public void output(String prefix){
  // Whenever you print, start with prefix
  System.out.println(prefix + ...);

  // When you call your recursive method
  String childPrefix = prefix+"  ";
  output(childPrefix);
}