所以我知道這個話題已經被覆蓋了。但是,我在自己的實施中遇到了麻煩。使用遞歸在Python中查找列表的所有排列
def permutation(word, fixed = [], passed = ""):
if passed != "":
fixed.append(passed)
if len(word) == 1:
fixed.append(word[0])
print fixed
else:
for i in range(len(word)):
passed = word[i]
rem = word[:i] + word[i+1:]
permutation(rem, fixed, passed)
permutation(["a","b","c"])
raw_input()
我想不要返回值,而是得到基地,然後打印結果。雖然我這樣做時,我得到如下:
['a', 'b', 'c']
['a', 'b', 'c', 'c', 'b']
['a', 'b', 'c', 'c', 'b', 'b', 'a', 'c']
['a', 'b', 'c', 'c', 'b', 'b', 'a', 'c', 'c', 'a']
['a', 'b', 'c', 'c', 'b', 'b', 'a', 'c', 'c', 'a', 'c', 'a', 'b']
['a', 'b', 'c', 'c', 'b', 'b', 'a', 'c', 'c', 'a', 'c', 'a', 'b', 'b', 'a']
這似乎接近,但是,我可以告訴大家,固定正在收集所有的輸出,我不完全理解爲什麼。
使用遞歸的時候,每個變量集合都是函數調用的局部變量嗎?這是我的理解,是這樣,但它似乎並不真正在這裏。
這不是家庭作業順便說一句。
對於任何有興趣更新代碼:
def permutation(word, fixed = "", passed = ""):
if passed != "":
fixed += passed
if len(word) == 1:
fixed += word[0]
print fixed
else:
for i in range(len(word)):
passed = word[i]
rem = word[:i] + word[i+1:]
permutation(rem, fixed, passed)
permutation(["a","b","c"])
raw_input()
它產生的輸出: ABC ACB BAC BCA 駕駛室 CBA
如果它不是作業['itertools.permutations'](http://docs.python.org/2/library/itertools.html#itertools.permutations)? – thefourtheye