第六章作業
基礎要求:
題目:要求將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...