在java中执行返回后执行方法

时间:2016-02-25 20:33:03

标签: java function methods

这是我的代码(方法):

    int temp =0;
    result=false;
    isPossible(temp);
    if(result) System.out.println("YES");
    else System.out.println("NO");
}} private static void isPossible( int i) {
    if(i>n || i+m >= n || i==n-1){
        result =true;
        return; 
    }
    if(visitedArray[i] == true){
        System.out.println(A[i]+"d");
        return;
    }
    visitedArray[i]= true;
    if (i+1 < n && A[i+1]==0){
        System.out.println(A[i]+"a");
        isPossible(i+1);            
    }
    if (i-1>=0 && A[i-1]==0){
        System.out.println(A[i]+"b");
    isPossible(i-1);
    }
    if(A[i+m]==0 && i+m < n){
     System.out.println(A[i]+"c");
        isPossible(i+m);
    }
}

输出是:

0c 0b 0a 0d 0c YES

我想知道为什么即使在执行返回之后也会执行最后一个if循环,也就是为什么输出打印&#39; 0c&#39;即使在&#39; 0d&#39;即退货已被执行?

1 个答案:

答案 0 :(得分:1)

问题是,在您打印a或b的情况下,您再次调用isPossible方法,但是您没有返回。那个程序的流程可以是:

  1. 第一个循环 - 打印C并进入第二个循环
  2. 第二个循环 - 打印B并进入第三个循环(注意 - 循环#2未完成)
  3. 第三个循环 - 打印A并进入第四个循环(注意 - 循环#3未完成)
  4. 第四个循环 - 打印D,返回
  5. 现在我们回到第三循环的继续,它可以再次打印C并再次递归
  6. 不知道YES打印的来源,未显示在您发布的代码中,但您明白了