Python学习(3)_全排列问题递归算法

全排列问题的递归算法
例如:R = {a,b,c},所有的排列组合为:abc,acb,bac,bca,cba,cab;
'''
	全排列算法——python实现
	2017年10月18日16:04:21
'''
'''
	全排列函数
	@param list 列表指针
	@param k	排列的起始位置
	@param m	排列的结束位置
	return void
'''
def perm( list, k, m ):
	#如果只剩下一个元素,直接输出
	if( k == m ):
		for i in list:
			print( i, end = "" )
		print( "" )	
	else:
		i = k;
		while i <= m:
			swap( list, k, i )
			perm( list, k+1, m )
			swap( list, k, i )
			i = i + 1
'''
	交换列表中的元素
	@param list 列表指针
	@param k	列表元素下标
	@param m	列表元素下标
	return void
'''			
def swap( list, k, m ):
	temp = list[m]
	list[m] = list[k]
	list[k] = temp
	
list = [ "a", "b", "c" ]
perm( list, 0, len( list )-1 )
'''
	在python3.6.1中运行的结果:
	==================================
	abc
	acb
	bac
	bca
	cba
	cab
	==================================
	总结:
		需要注意python中传值传引用的问题,
		如果函数收到的是一个可变对象(比如字典或者列表)的引用,
		就能修改对象的原始值--相当于通过“传引用”来传递对象。
		如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,
		就不能直接修改原始对象--相当于通过“传值'来传递对象。
'''


小艾的博客 http://www.aixinyan.me/