遞迴求解進製轉換

2021-09-24 05:31:03 字數 2432 閱讀 1841

第六章作業

基礎要求:

題目:要求將10進製數轉換為2-16進製制。

遞迴實現:先找遞迴出口,我們採用除d倒取餘的方法求進製轉換,很明顯遞迴出口就是當n等於0時,當n等於0時,遞迴結束,輸出轉換結果。再找遞迴公式,發現,每次遞迴迴圈時,只改變n的值,每次n的值都整除d。所以遞迴公式為change(str,n/d,d)。

非遞迴實現:將遞迴迴圈轉換為while迴圈,迴圈退出條件為n=0;

n每次更新為n/d;

提高要求:

題目:輸入:正整數(n≤20000)

輸出:符合約定的n的0,2表示(在表示中不能有空格)

列如:1315最後可表示為:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

遞迴實現:

先找遞迴出口,根據題目分析,最後要轉換成0,2的表示,所有的數都表示成0,2,特別2(1)表示成2。很明顯,遞迴出口不只乙個,當n等於0,1,2時各乙個出口,輸出2(0),2,2(2);

再找遞迴公式,對每個2的(m)中的m迴圈,用位運算,右移1

位,除二,取出所有有值的位,進行輸出2(d)的格式,將每乙個數都轉換為0,2的格式。只要不是0,1,2的2進製都進行遞迴。

所以遞迴公式change(i>>1)僅當i&1>0;

基礎要求:

遞迴模型:

遞迴棧:以5的二進位制位例;

遞迴的層次

遞迴棧的狀態(n的值)說明1

change(5)

第一次遞迴入棧

2cahnge(2)

change(5)

由第一層進入第二層

第二次遞迴,入棧

3change(1)

cahnge(2)

change(5)

由第二層進入第三層

第三次遞迴,入棧

4change(0)

change(1)

change(2)

change(5)

由第三層進入第四次遞迴,進入第四次遞迴,入棧

5change(1)

change(2)

change(5)

得change(0)的值,出棧

6change(2)

change(5)

得change(1)的值,出棧

7change(5)

得change(2)的值,出棧8棧空

得change(5)的值,出棧

提高要求:

遞迴模型:change(n)

基礎要求:

餘數賦值:

測試**:

執行結果:

提高要求:

測試:進入第一層迴圈

進入第二層迴圈

進入第三次迴圈

在第三次迴圈中,3=2+1,則分別輸出

進第四次迴圈

退迴圈:

退迴圈退迴圈

非遞迴和遞迴的轉化,一種是迭代的方法,例如進製轉換的題,就是這樣轉變成非遞迴的。用while迴圈來表達遞迴的迭代。還有就是將其利用和棧的關係,用出棧和入棧來轉換。

遞迴的關鍵就是尋找遞迴出口和遞迴公式,只要找到這兩點,就能搭建出遞迴模型,進行求解。

進製轉換問題求解

include include include 總體思想 採用乙個陣列存放基數 0123456789abcdef 即數字的每一位由上述陣列的元素組成 如乙個數表示為 15f 則該數字實際為 1 5 15 這樣的話處理進製轉換問題就和大整數運算問題一樣了。將數字轉換為字串形式 int n2str in...

進製轉換問題求解

include include include 總體思想 採用乙個陣列存放基數 0123456789abcdef 即數字的每一位由上述陣列的元素組成 如乙個數表示為 15f 則該數字實際為 1 5 15 這樣的話處理進製轉換問題就和大整數運算問題一樣了。將數字轉換為字串形式 int n2str in...

遞迴轉換進製

輸入乙個十進位制數n,將它轉換成r進製數輸出。輸入資料報含多個測試例項,每個測試例項包含兩個整數n 32位整數 和r 2 r 16,r 10 為每個測試例項輸出轉換後的數,每個輸出佔一行。如果r大於10,則對應的數字規則參考16進製制 比如,10用a表示,等等 7 2 23 12 4 3111 1b...