透過全排列問題分析for循環遞歸的過程

問題描述

全排列:元素的所有可能的排列。例如:由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)

具體調用過程如下所示:
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章