首页 > 解决方案 > 在 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));
    }

有人可以告诉我在调用函数时我犯了什么错误,我应该如何调用以避免任何错误?

标签: javafunctionrecursionprogram-flow

解决方案


这是来自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

您将观察到此处给出的输出与您正在运行的程序一致。

对于您的错误消息,请参阅此问题:“'void' type not allowed here”错误(Java)


推荐阅读