【問題】
每一對相鄰整數的二進位制表示只有一位發生變化,這種編碼稱為gray碼。
如下所示3位的gray碼:
0000
0011
0112
0103
1104
1115
1016
1007
要產生n位的gray碼,所需的遞迴思想概括如下:
1. 寫出n-1位的gray碼。
2. 以相反的順序在該gray碼下重寫一遍。
3. 在第一步得到的gray碼前加0,在第二步得到的gray碼前加1。
繼續以3位gray碼為例,推導過程如下所示:
/* 前半部分格雷碼存入陣列 */
/*****************************************/
void forecode(int forenum, int n)
/*****************************************/
/* 後半部分格雷碼存入陣列 */
/*****************************************/
void backcode(int backbegin, int backend, int n)
/*****************************************/
/* 生成格雷碼 */
/*****************************************/
void graycode(int nbits)
else
graycode(nbits - 1); /*遞迴呼叫*/
for(i = 0; i < nbits; i++)
m = 2 * m; /*n位的gray碼總共有2**n次方個*/
k = m / 2;
forecode(k - 1, nbits);
backcode(k, m, nbits);
}/****************************************/
/* 列印格雷碼 */
/****************************************/
void printgraycode(int nbits)
}int main()
C程式設計的抽象思維 遞迴過程 砝碼稱重
問題 在狄更斯時代,商人們用砝碼和天平來稱量商品的重量,如果你只有幾個砝碼,就只能精確地稱出一定的重量。例如,假定只有兩個砝碼 分別是1kg和3kg。只用1kg的砝碼可以稱出1kg重量的商品,只用3kg的砝碼可以稱出3kg重量的商品。1kg和3kg的砝碼放在天平同一邊可以稱出4kg重量的商品,放在不...
C程式設計的抽象思維 遞迴過程 數集分離問題
問題 給定乙個數集,分離問題要求找到其子集,使所有的數相加等於乙個特定的數。例如,有兩種方法可以分離集合,從而使子集中的額元素相加等於5 第一種方法 選1和4 第二種方法 只選5 相比之下,沒有方法分離集合得到11。編寫乙個函式numberofpartitions,它以乙個整數陣列 陣列長度和目標數...
《C程式設計的抽象思維》1 9程式設計練習
1 溫度轉換 includeint main 2 長度轉換 includeint main return0 3 計算1 2 3 100 includeint main 4 計算序列值 includeint main 5 按照指定格式輸入乙個整數序列中的最大值 includeint main prin...