論碼農的道德修養
public class YH {
/**
* @author stefan_xiepj
* @param agrs
* 算法思想:分割分治算法,遞歸調用
*/
public static void main(String agrs[]) {
//測試main函數
int[][]test = subset(5);
for(int i=0;i<test.length;i++){
for(int j=0;j<test.length;j++){
System.out.print(test[i][j]+" ");
}
System.out.println();
}
}
public static int[][] subset(int n){
//定義二維數組長度
int length = (int) Math.pow(2, n);
//定義二維數組
int a[][] = new int [length][length];
//定義遞歸出口
if(length==2){
a[0][0]=1;
a[0][1]=2;
a[1][0]=a[0][1];
a[1][1]=a[0][0];
}else
//遞歸函數實現
{
//遞歸子函數調用
int [][]b = subset(n-1);
int bLength=b.length;
for(int i=0;i<bLength;i++){
for(int j=0;j<bLength;j++){
//復制下一遞歸值,並計算橫向值
a[i][j] = b[i][j];
a[i][bLength+j] = (int) (b[i][j]+Math.pow(2, n-1));
}
}
//鏡像結果集
for(int i=0;i<bLength;i++){
for(int j=0;j<length;j++){
a[length-i-1][length-j-1]=a[i][j];
}
}
}
return a;
}
}