一、題目分析
將非負十進位制整n轉換成b進製(其中b = 2~16)
將任意正整數n用2的冪次方表示
二、演算法設計
1、轉換進製問題:exer.cpp
遞迴演算法
遞迴出口:n / b < b
遞迴表示式:f(n,b)=f(n/b,b) (n/b>=b)
遞迴棧表示;
2、用二的冪次方表示任意正整數n問題:exer2.cpp
遞迴演算法
遞迴出口:f(n)=1或f(n)=0或f(n)=2
遞迴表示式:f(n)=f(logn/log2)+f(n-pow(2,logn/log2)) (logn/log2>2)
遞迴棧表示:
三、源**
1、數值轉換問題
遞迴:
#include using namespace std;
void numsystemconversion(int a,int b)
; if(a / b >= b)
else
cout << str[a % b];
}void main()
非遞迴:
#include using namespace std;
void main()
; char temp[10];
cout << "請輸入任意非負十進位制整數:";
cin >> n;
cout << "請輸入想要轉換的數制:";
cin >> b;
cout << "轉換後的結果為:";
int i =0;
bool bl = true;
while(bl)
else
}while(i-- > 0)
cout << endl;
}
2.用2的冪次方表示任意正整數問題
遞迴;
#include #include void conversion(int n);
void main()
void conversion(int n)
else if(y == 1)
else
temp = n - pow(2,y);
if(temp > 0)
}
四、執行結果
演算法 08 遞迴與非遞迴
我們曾經討論過,遞迴程式在解決大規模問題時,經常會導致程式效能下降甚至不可用,因此我們研究遞迴只是通過遞迴來分析問題的特性,最終將遞迴程式轉化為非遞迴程式實現。首先我們先看乙個用分治法 遞迴 畫刻尺的問題 在刻尺上每個英吋的1 2英吋點處做乙個標記,在1 4英吋的間隔處做乙個稍短的標記,在1 8英吋...
Ackerman的遞迴與非遞迴演算法
已知ackerman函式的定義如下 a km m,n n 1,text akm m 1,1 m neq 0,n 0 akm m 1,akm m,n 1 m neq 0,n neq 0 end akm m,n n 1 akm m 1 1 akm m 1,akm m,n 1 m 0m 0,n 0m 0 ...
演算法 歸併演算法的遞迴與非遞迴形式
歸併演算法是將兩個或兩個以上的有序表組合成乙個新的有序表,它的原理是 假設初始序列含有n個記錄,則可以看成是n個有序子串行,兩兩歸併,得到 n 2 個有序子串行,再次歸併 不斷重複直至歸併到長度為n的有序序列,這樣的排序方法稱為2路歸併排序。例項一 遞迴形式的2路歸併演算法 define maxsi...