C 遞迴策略

2021-10-18 10:49:19 字數 1316 閱讀 3673

有a、b、c三個塔柱,8個圓盤在塔柱a上,大小隨高度增加而減小,將8個圓盤從塔柱a移動到塔柱b,遵循以下規則:

每次只移動乙個圓盤

不允許將大圓盤移動到小圓盤之上

在用遞迴解決此問題時,遞迴程式應包含以下引數:

需要移動圓盤數量

開始的塔柱名字

最終所在的塔柱名字

臨時儲存圓盤的塔柱名字

據此得到如下函式原型:

void

movetower

(int n,

char start,

char finish,

char tmp)

;

將最上面的n-1個圓盤從開始所在的塔柱移動到臨時塔柱上

將最底下的乙個圓盤從開始所在的塔柱移動到最終所在塔柱上

將n-1個圓盤從臨時塔柱移回到最終所在塔柱上

操作輸出函式:

void

movesingledisk

(char start,

char finish)

具體實現函式:

void

movetower

(int n,

char start,

char finish,

char tmp)

else

}

給定乙個整數集合和乙個目標值,確定是否可以找到這個整數集合的乙個子集,子集的和等於指定的目標值

其判定函式如下:

bool

subsetsumexists

(set<

int>

& set,

int target)

;

選擇乙個元素,然後將其從集合中刪除,建立乙個更小的集合。

bool

subsetsumexists

(set<

int>

& ji_he,

int target)

else

}

這個遞迴策略包含兩個分支,一種包含特定的元素,另一種不包含該特定元素,可以稱其為包含/排除模式,在涉及陣列和字串的應用中應注意識別。

對於乙個給定的字元集合可以產生其所有的排列組合。

實現函式如下:

set

generatepermutations

(string str)

else}}

return result;

}

遞迴與分治策略

1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...

遞迴與分治策略

1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...

分治策略與遞迴

先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...