【问题标题】:In case of nested loops, what happens in case of multiple print outputs?在嵌套循环的情况下,如果有多个打印输出会发生什么?
【发布时间】:2018-05-27 06:33:48
【问题描述】:
public class Test {
    public static void main(String[] args) {
        print(4);
    }

    static void print(int n){
        if (n <= 1)
            System.out.print("A");
        else {
            print(n-1);
            print(n-2);
        }
    }
}

这段代码的输出结果是AAAAA。但我想知道怎么做?我什么时候考虑(n-1),什么时候考虑(n-2)

【问题讨论】:

  • 请正确缩进您的代码。
  • 寻求帮助时,最好以可读、一致的方式缩进和格式化代码。 (当寻求帮助时也是一个好主意。)(编辑:Stefan 和我这次已经为你做了。)
  • 到目前为止,回答此类问题的最佳方法是使用 IDE 中内置的调试器。在调试模式下运行代码,逐个执行语句,查看变量的值等。请注意,这是一个 递归 函数(不是嵌套函数),因此请注意'将有多个n 来跟踪(每个调用都有其自己的 n)。
  • @Stultuske 抱歉,我两周前才开始编码。很高兴听到某人的解释。
  • @nerv21 如果您是在两周前才开始的,那么您很可能只是匆匆忙忙。你知道你写的那些行是做什么的吗?你知道什么是原语和对象,它们有什么不同吗?您了解什么是静态,以及为什么需要它来让您的代码(按原样)运行吗?我的建议是,查看您使用的方法的文档,看看它们实际做了什么。然后,在你的头脑中检查你的代码,并检查你的代码执行的顺序。

标签: java if-statement methods static void


【解决方案1】:

首先,问题的标题是错误的。您的代码中没有循环,只有递归。

现在,为了分析输出,让我们看看每个方法做了什么调用:

print(4)
    calls print(3)
        calls print(2)
            calls print(1) which prints 1st A
            calls print(0) which prints 2nd A
        calls print(1) which prints 3rd A
    calls print(2)
        calls print(1) which prints 4th A
        calls print(0) which prints 5th A

总共打印了 5 个"A"s。

【讨论】:

    【解决方案2】:

    您正在做的是递归调用 print(int n) 方法 - 递归是一种方法调用自身来解决问题的技术。在数学中,您可以将其表示为 f(x) = f(x-1) + f(x-2)。

    print(4) print(3) print(2) print(1) System.out.print("A") print(0) System.out.print("A") print(1) System.out.print("A") print(2) print(1)
    System.out.print("A") print(0) System.out.print("A")

    您将观察到该函数将打印 f(n+2) "A"s,其中 f(x) 是斐波那契数列,其中 x 是大于或等于 0 的整数。

    【讨论】:

      【解决方案3】:

      我希望下面的图片能帮助你可视化输出-

                           print(4)
                           /     \
                   print(3)       print(2)
                   /   \          /     \
              print(2) print(1) print(1) print(0)
              /   \       |       |       |   
       print(1)  print(0) |       |       |   
          |         |     |       |       |   
          A         A     A       A       A   
      

      【讨论】:

      • 非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多