我的问题!!
public static void main(String[] args) {
int[] ge = {1,2,3};//个位
int[] shi = {4,5,6};//十位
int[] bai = {7,8,9};//百位
//可以组成多少个不重复的三位数,请打印出来
}
用递归的思想怎么做!
public static void main(String[] args) {
int[] ge = {1,2,3};//个位
int[] shi = {4,5,6};//十位
int[] bai = {7,8,9};//百位
//可以组成多少个不重复的三位数,请打印出来
}
用递归的思想怎么做!
参考代码如下:public class Number
{
static int[] ge = {1,2,3};//个位
static int[] shi = {4,5,6};//十位
static int[] bai = {7,8,9};//百位 //递归
public static void number(int i,int j,int k)
{
if(i>=bai.length) return;
if(j>=shi.length) number(i+1,0,0);
else if(k>=ge.length) number(i,j+1,0);
else {
System.out.println(bai[i]*100+shi[j]*10+ge[k]);
number(i,j,k+1);
}
}
public static void main(String[] args)
{
number(0, 0, 0);
}
}运行结果:
741
742
743
751
752
753
761
762
763
841
842
843
851
852
853
861
862
863
941
942
943
951
952
953
961
962
963
private int[] ge ;//个位
private int[] shi ;//十位
private int[] bai ;//百位
public Tester(int bai[],int shi[],int ge[]){
this.ge=ge;
this.bai=bai;
this.shi=shi;
}
public static void main(String[] args) {
int[] ge = {1,2,3};//个位
int[] shi = {4,5,6};//十位
int[] bai = {7,8,9};//百位
Tester test=new Tester(bai,shi ,ge);
//可以组成多少个不重复的三位数,请打印出来
test.print(2,2,2);
}
public void print(int baiNum,int shiNum,int geNum){
System.out.println(bai[baiNum]+""+shi[shiNum]+""+ge[geNum]);
if(geNum==0){
if(baiNum==0&&shiNum==0)return;
if(shiNum==0){baiNum--;shiNum=2;}
else --shiNum;
geNum=2;
}
else{
--geNum;
}
print(baiNum,shiNum,geNum);
}
}
晦涩难懂的代码不一定就是好代码。
用个三重循环可以轻松搞定。虽然"撮"了一点。
经测试,在不打印输出信息的情况下,三楼的递归程序运行所需要的时间比循环多耗时20%;
public static void main(String[] args) {
int[] ge = {1,2,3};//个位
int[] shi = {4,5,6};//十位
int[] bai = {7,8,9};//百位
long t1=0,t2=0; for(int m=0;m<1000000;m++){
long t11=System.nanoTime();
for (int i = 0; i < bai.length; i++)
for (int j = 0; j < shi.length; j++)
for (int k = 0; k < ge.length; k++){
//System.out.println(""+bai[i]+shi[j]+ge[k]);
}
long t12=System.nanoTime();
number(0, 0, 0);
long t13=System.nanoTime();
t1=t1+t12-t11;
t2=t2+t13-t12;
} System.out.println(t1);
System.out.println(t2);
}