如果一種演算法的定義組成如下,則它就是遞迴的。
1、對應於某些引數可以求值的乙個或多個終止條件。
2、 乙個遞迴步驟,它根據先前某次值得求當前值。遞迴步驟最終必須導致終止條件。
折半查詢
折半查詢以指定的鍵值為引數掃瞄含n個元素的有序陣列以查詢於鍵值匹配的值。函式返回匹配值得下標,如果沒有匹配值則返回-1.折半查詢演算法可以用遞迴發描述。
#include
#include
using
namespace std;
// 對陣列
template
<
typename t>
intbinsearch
(t a,
int low,
int high, t key)
// 與表的中點值進行比較,若與key不等,則將表分為兩半,並對相應子表進行折半查詢
else
else
if(key < midvalue)
else}}
// 對容器
template
<
typename t,
typename tt>
intbinsearch
(t a,
int low,
int high, tt key)
// 與表的中點值進行比較,若與key不等,則將表分為兩半,並對相應子表進行折半查詢
else
else
if(key < midvalue)
else}}
intmain()
cout <<
"result = "
<< binsearchdouble
>
,double
>
(vi,
0, vi.
size()
-1,5.0
)<< endl;
return0;
}
經過苦思冥想終於在一天的時間內搞了出來,由於沒有學習過演算法,使得苦逼的自己經歷了一番磨難。
實際上主要原因是對遞迴沒有深入了解,現在把程式貼上在這裡,方便自己隨時檢視,也希望能夠幫助其他人。
#include
#include
using
namespace std;
void
perm
(vector<
int>
&vi, vector<
int>
::iterator begin,
vector<
int>
::iterator end, vectorint>
>
&vvi)
vvi.
push_back
(temp);}
else}}
intmain()
; vectorint>
> vvi;
perm
(vi, vi.
begin()
, vi.
end(
), vvi)
;for
(auto a:vvi)
return0;
}
N個數全排列的非遞迴演算法
n個數全排列的非遞迴演算法 include stdio.h voidswap int a,int b 根據當前的排列p,計算下乙個排列。原則是從1234 4321,若p已經是最後乙個排列,傳回false,否則傳回true。p是乙個n維向量。boolnextpermutation int p,intn...
N個數的全排列
我採用的方法是類似密碼箱的轉輪來得到所有的排列組合 比如求 1,2,3,4的所有排列組合 採用遞減式輪轉來生成 n 4 以1234為初始值 得到如下的所有4個組合,放入最終的容器中 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 n 3 以上面的四個作為初始值,在第三位開始輪轉 得到...
資料結構 實現陣列全排列 c 實現
從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。當n 1時,那乙個元素只有乙個全排列 當n 1時,考慮以下情況 int arr 對3個數進行全排列 先固定1,對2 3進行全排列 再固定2,對1 3進行全排列...