递归生成格雷码
当n=1时,{0,1}
当n=2时,{00,01,11,10}
当n=3时,{000,001,011,010,110,111,101,100}
…
n位格雷码共有2^n个元素。
其中每个元素是(n-1)位的格雷码前面加0,然后再反向后前面加1生成的。
如n=3可由n=2进行两步操作后得到:
1.在n=2的格雷码前面加0,生成:000,001,011,010
2.在n=2的格雷码逆序后前面加1,生成:110,111,101,100
将两部分顺序输出即得n=3的格雷码。
public static String[] getGray(int n){
// static double pow(double a, double b) 将第一个参数的值返回到第二个参数的幂。
String[] gray=new String[(int)Math.pow(2,n)];
if(n==1){
gray[0]="0";
gray[1]="1";
return gray;
}
String[] s=getGray(n-1);
for(int i=0;i<s.length;i++){
gray[i]="0"+s[i];
gray[gray.length-1-i]="1"+s[i];
}
return gray;
}