在双递归时感到困惑

时间:2014-05-08 01:52:27

标签: java recursion

我试图了解以下代码的输出如何导致:cbaccbacbac通过在main中调用Mys(7)。

public static void Mys(int n){
        if(n == 0){
            System.out.println("a");

        }
        else if(n == 1 ){
            System.out.println("b");

        }
        else if(n == 3){
            System.out.println("c");
        }

        else{
            Mys(n-1);
            Mys(n-2);
        }
    }

有人可以解释整个递归流程如何在这里工作。我有点困惑。

由于

2 个答案:

答案 0 :(得分:0)

我希望您打算Mys(n-1)的来电自动拨打Mys(n-2),从而为相同号码提供多个输出。

如果n=6,它将

  1. 致电Mys(5),致电Mys(4)Mys(3)
  2. ,然后拨打Mys(4),即Mys(3)Mys(2)
  3. Mys(2)然后会致电Mys(1)Mys(0)

答案 1 :(得分:0)

如果您致电Mys(7),您将获得指定的输出。

以下是它的工作原理:

  • Mys(0)始终打印" a"。
  • Mys(1)始终打印" b"。
  • Mys(2)始终致电Mys(1)然后Mys(0),因此始终打印" ba"。
  • Mys(3)始终打印" c"。
  • Mys(4)始终致电Mys(3)然后Mys(2),因此始终打印" cba"。
  • Mys(5)始终致电Mys(4)然后Mys(3),因此始终打印" cbac"。
  • Mys(6)始终致电Mys(5)然后Mys(4),因此始终打印" cbaccba"。
  • Mys(7)始终致电Mys(6)然后Mys(5),因此始终打印" cbaccbacbac"。