递归插数字

/*今有7对数字:两个1,两个2,两个3,…两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。*/

@SuppressWarnings("unused")
public static void m(int b){
//定义数组存储数据
int[] a=new int[14];
//定义boolean类型数组判断是否已经,使用过此数据,不会出现重复
boolean[] c=new boolean[8];
//如果小标b=14则直接输出结果
if (b==14) {
//输出结果时,限制小标0和1的位置为固定的7和4
if (a[0]==7&&a[1]==4) {
//遍历输出数组
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
}
return;
}
//如果小标为b的已经存在,就执行下一个小标的插入数据操作
if (a[b]!=0) {
m(b+1);
}
//如果小标为b的没有数据就执行以下方案
if (a[b]==0) {
//遍历1到7
for (int i = 1; i < 8; i++) {
//判断获取没有使用的1到7中的数据,
//判断下标是否越界
//判断规则位置是否存在数据
if (c[i]=false&&(b+i+1)<14&&a[b+i+1]==0) {
//指定此下表的数据
a[b] = i;
//指定符合规则的下表所对应的数据
a[b + i + 1] = i;
//设置此数字已经被使用
c[i] = true;
//回调此方法,执行下一个下标数据的插入
m(b + 1);
System.out.println("hhhhhh");
//不通过,从新复制上一层的方法下标b值的对应数组数据
c[i] = false;
a[b] = 0;
a[b + i + 1] = 0;
}
}

//如果不满足条件,就跳出此时执行的当前层的方法
return;
}
}

此方法,主要的递归的运用和return的跳出时执行一层方法的结束

原文地址:https://www.cnblogs.com/plas/p/9870944.html