递归求助

Uranous 2017-12-20 09:43:02
import java.util.Scanner;

public class Main {
static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入需要排列的字符:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
StringBuffer sr = new StringBuffer(s);
StringBuffer re = new StringBuffer();
new Main().zifupaixu(sr,re);
System.out.println(count);
}

public void zifupaixu(StringBuffer sr,StringBuffer re){
if(sr.length()==0){
System.out.println(re);
count++;
return;
}

for(int i=0;i<sr.length();i++){
StringBuffer tsr=new StringBuffer(sr);
StringBuffer tre=new StringBuffer(re);
tre.append(tsr.charAt(i));
tsr.deleteCharAt(i);
new Main().zifupaixu(tsr, tre);
}
}
}
求解释这个代码的到底是如何循环的
例abc
abc
acb
bac
bca
cab
cba
求 abc和acb的是怎样切换的
初学java的菜鸟
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2017-12-21
  • 打赏
  • 举报
回复
public void zifupaixu(StringBuffer sr,StringBuffer re){ if(sr.length()==0){ System.out.println(re); count++; return; } for(int i=0;i<sr.length();i++){ StringBuffer tsr=new StringBuffer(sr); StringBuffer tre=new StringBuffer(re); tre.append(tsr.charAt(i)); tsr.deleteCharAt(i); new Main().zifupaixu(tsr, tre); } } 以abc为例,就是把tsr=“abc”,依次赋值给tre,(1)一次循环里面(tre="a",tsr="bc",下一次循环,tre="ab",tsr="c",下一次循环,tre="abc",tsr="")这样就输出abc了, 可以加断点,debug模式,运行一遍,看看每一步执行之后,tsr,tre这两个值的变化,就清楚了
snta520 2017-12-21
  • 打赏
  • 举报
回复
楼主想一下递归调用的层次图,一层调一层,到为0时,一层层返回。所以一开始是挨个把第一个字符拿出来,最后从里到外把字符放回去。比如依次拿到123456,但是6是最早执行完成的函数,所以最先返回,依次654321

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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