这个递归程序的执行顺序是怎样的?
import java.util.Scanner;
public class DFS {
static int book[]=new int[10];
static int a[]=new int[10];
static int n;
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入n:");
n=input.nextInt();
dfs(1);
}
public static void dfs(int step){ //step表示现在站在第几个盒子面前
if(step==n+1){ //如果站在第n+1个盒子面前表示前n个盒子已经放好扑克牌了
//输出一种排列
for(int i=1;i<=n;i++){
System.out.print(a[i]);
}
System.out.println();
return;
}
for(int i=1;i<=n;i++){
//判断扑克牌i是否还在手上
if(book[i]==0){ //book[i]=0表示扑克牌仍在手上
a[step]=i; //将i号扑克牌放在第step个盒子中
book[i]=1; //book[i]=1表示扑克牌不在手上
dfs(step+1);
book[i]=0; //一定要将刚才尝试得扑克牌收回,才能进行下一次尝试
//System.out.println(book[i]+" "+i);
}
}
return;
}
}
dfs(step+1)的下一步book[i]=0是怎样执行的?在第一次打印后,没有退出整个dfs方法吗?