遞迴與非遞迴演算法

2021-09-24 05:43:27 字數 1479 閱讀 5860

一、題目分析

將非負十進位制整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...