ACwing92 3種遞迴方式

2021-09-26 04:28:34 字數 1801 閱讀 2732

遞迴實現指數型列舉

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

int n;

vector<

int>ans;

void

dfs(

int x)

cout << endl;

return;}

dfs(x +1)

; ans.

push_back

(x);

dfs(x +1)

; ans.

pop_back()

;//這是最重要的一步,當子問題求解失敗,還原現場,便於求解其他子問題。

}int

main()

遞迴實現組合型列舉,也就是選m個數

與上面不同的是我們只需要選擇m個數並且要求字典序最小。上面的程式中我們先列舉了不選x的子狀態,本題中我們只需要先列舉選x的子狀態就可以保證字典序小的先輸出。

所謂回溯,就是消除這個狀態造成的影響,便於列舉另乙個子狀態。就像不小心,拿了鈔票,走了左邊的資本主義,但是發生經濟危機了,搞不了,回到原點。往右走社會主義,但是有鈔票不行,得扔了,拿起社會主義的鋤頭,才能往右走社會主義。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

int n,m;

vector<

int>ans;

vector<

int>res;

void

dfs(

int x)

cout << endl;

return;}

//先列舉選x的子狀態,那麼就可以保證字典序小的先選到了

ans.

push_back

(x);

dfs(x +1)

; ans.

pop_back()

;dfs

(x +1)

;}intmain()

return0;

}

94. 遞迴實現排列型列舉

回溯真好玩哈哈哈

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

int n,vis[

1005];

vector<

int>ans;

void

dfs(

int x)

cout << endl;

return;}

for(

int i =

1;i <= n;i++)}

intmain()

遞迴 換種方式思考 How What

函式式程式設計裡沒有迴圈,只有遞迴。那麼如何用遞迴來實現平時很常見的迴圈呢?那麼我們就從最簡單的開始來試試看,例如寫幾個string.h裡面的函式 unsigned int my strlen const char str char my strcpy char dest,const char sr...

兩種方式遍歷二叉樹 遞迴方式和非遞迴方式

用遞迴的方法遍歷二叉樹很簡單,但是非遞迴的遍歷二叉樹就比較困難了。在非遞迴方法中,我們需要棧stack的幫助。以下是分別用遞迴方式和非遞迴方式寫的前 中 後序遍歷二叉樹的方法,經過驗證結果是正確的。include include using namespace std struct node voi...

快速排序的兩種實現方式(遞迴 非遞迴)

ifndef quick sort h define quick sort h include include include 快速排序是不穩定的,其時間平均時間複雜度是o nlgn 逆序序列下效果最差,逼近 o n2 起空間複雜度是 log2n,因為需要空間來儲存遞迴的區間範圍。templatec...