这个递归程序的执行顺序是怎样的?

sinat_35036964 2017-12-23 10:07:47
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方法吗?
...全文
690 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-12-30
  • 打赏
  • 举报
回复
n=1时 将1替换fun()中的n 此时syso前面是fun(2)
复制该函数替换fun(2) 此时syso前面是fun(3)
。。。
  • 打赏
  • 举报
回复
理解了只有fun第一次结束的时候才会执行输出“执行”+n就明白了。。。。只有n==4才真正第一次开始结束,,4结束了自然就到3了。然后是2.不符合结束条件的的都是卡在输出结束前面,最后一步结束了,,,才开始一层层的往外退。。。
sinat_35036964 2017-12-23
  • 打赏
  • 举报
回复
第一个问题,截下图把
sinat_35036964 2017-12-23
  • 打赏
  • 举报
回复
打印的结果1 2 3我知道,结束4 结束3 结束2有点不清楚,fun中的fun的下一步System.这一步是整个递归结束后再执行的吗?
sinat_35036964 2017-12-23
  • 打赏
  • 举报
回复
写了个测试程序 打印的结果
sinat_35036964 2017-12-23
  • 打赏
  • 举报
回复
就是到n=4第一次打印后123,下面程序执行的顺序不懂
oyljerry 2017-12-23
  • 打赏
  • 举报
回复
到n等于4时函数才返回。所以才会打印后面的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧