C程式設計的抽象思維 遞迴過程 格雷碼

2021-06-22 02:08:38 字數 1499 閱讀 3999

【問題】

每一對相鄰整數的二進位制表示只有一位發生變化,這種編碼稱為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...