問題描述
全排列:元素的所有可能的排列。例如:由a,b,c三個字母的全排列爲abc,acb,bac,bca,cab,cba六個排列
程序
#include <iostream>
using namespace std;
void swap(char &a, char &b)
{
char tmp = a;
a = b;
b = tmp;
}
void print(string s, int j)
{
if(j == s.size() - 1) {
cout<<s<<endl;
return;
}
else {
for(int i = j; i < s.size(); i++) {
swap(s[i], s[j]);
print(s, j + 1);
swap(s[i], s[j]);
}
}
}
int main()
{
string s = "abc";
print(s, 0);
return 0;
}
遞歸過程分析
首先從main函數開始分析:
接着進入print(s,0),將main視爲第一層,這個遞歸一共爲四層:
層數 | 名稱 |
---|---|
第一層 | main() |
第二層 | print(s,1) |
第三層 | print(s,2) |
第四層 | print(s,3) |
具體調用過程如下所示: