在 Java 中使用递归函数时出错
Error while using a recursive function in Java
我正在尝试 运行 下面的递归函数。在这里-
public static void Q3(int n) {
if (n <= 0)
return;
StdOut.println(n);
Q3(n-2);
Q3(n-3);
StdOut.println(n);
}
谁能帮我理解这个函数的控制流程?我试过但无法理解如何调用此函数以及如何通过后续递归调用打印不同的值。此外,当我尝试在 java 程序中使用该函数时收到此错误消息-
Error:(19, 26) java: 'void' type not allowed here
错误在线-
StdOut.println(Q3(n));
这是我用于函数调用的代码-
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
StdOut.println(Q3(n));
}
谁能告诉我我在调用该函数时犯了什么错误,我应该如何调用才能避免任何错误?
这是来自 q3(6)
的调用树(Java 方法名称以小写字母开头),输出在最右边:
q3(6) +> print(6) 6
+> q3(4) +> print(4) 4
: +> q3(2) +> print(2) 2
: : +> q3(0)
: : +> q3(-1)
: : +> print(2) 2
: +> q3(1) +> print(1) 1
: : +> q3(-1)
: : +> q3(-2)
: : +> print(1) 1
: +> print(4) 4
+> q3(3) +> print(3) 3
: +> q3(1) +> print(1) 1
: : +> q3(-1)
: : +> q3(-2)
: : +> print(1) 1
: +> q3(0)
: +> print(3) 3
+> print(6) 6
您会发现此处给出的输出与您的 运行 程序一致。
有关您的错误消息,请参阅 this question: “'void' type not allowed here” error (Java)
我正在尝试 运行 下面的递归函数。在这里-
public static void Q3(int n) {
if (n <= 0)
return;
StdOut.println(n);
Q3(n-2);
Q3(n-3);
StdOut.println(n);
}
谁能帮我理解这个函数的控制流程?我试过但无法理解如何调用此函数以及如何通过后续递归调用打印不同的值。此外,当我尝试在 java 程序中使用该函数时收到此错误消息-
Error:(19, 26) java: 'void' type not allowed here
错误在线-
StdOut.println(Q3(n));
这是我用于函数调用的代码-
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
StdOut.println(Q3(n));
}
谁能告诉我我在调用该函数时犯了什么错误,我应该如何调用才能避免任何错误?
这是来自 q3(6)
的调用树(Java 方法名称以小写字母开头),输出在最右边:
q3(6) +> print(6) 6
+> q3(4) +> print(4) 4
: +> q3(2) +> print(2) 2
: : +> q3(0)
: : +> q3(-1)
: : +> print(2) 2
: +> q3(1) +> print(1) 1
: : +> q3(-1)
: : +> q3(-2)
: : +> print(1) 1
: +> print(4) 4
+> q3(3) +> print(3) 3
: +> q3(1) +> print(1) 1
: : +> q3(-1)
: : +> q3(-2)
: : +> print(1) 1
: +> q3(0)
: +> print(3) 3
+> print(6) 6
您会发现此处给出的输出与您的 运行 程序一致。
有关您的错误消息,请参阅 this question: “'void' type not allowed here” error (Java)