递归深度 - 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);
}
我想格式化 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);
}