我在这里提到了有关递归的几个问题,但是我无法理解递归如何解决这个特定问题:递归程序在Python中获取字符串中所有字符的组合:
st= [] def combi(prefix, s): if len(s)==0: return else: st.append(prefix+s[0]) ''' printing values so that I can see what happens at each stage ''' print "s[0]=",s[0] print "s[1:]=",s[1:] print "prefix=",prefix print "prefix+s[0]=",prefix+s[0] print "st=",st combi(prefix+s[0],s[1:]) combi(prefix,s[1:]) return st print combi("",'abc')
我已经使其打印出值,以便可以看到发生了什么。这是输出:
s[0]= a s[1:]= bc prefix= prefix+s[0]= a st= ['a'] s[0]= b s[1:]= c prefix= a prefix+s[0]= ab st= ['a', 'ab'] s[0]= c s[1:]= prefix= ab prefix+s[0]= abc st= ['a', 'ab', 'abc'] s[0]= c s[1:]= prefix= a ----> How did prefix become 'a' here. Shouldn't it be 'abc' ? prefix+s[0]= ac st= ['a', 'ab', 'abc', 'ac'] ......... ......... ['a', 'ab', 'abc', 'ac', 'b', 'bc', 'c'] # final output
完整输出:http : //pastebin.com/Lg3pLGtP
正如我在输出中所示,前缀如何变成“ ab”?
我试图可视化对combi(prefix + s [0],s [1:])的递归调用。我理解正确吗?
combi()函数中有两个递归调用。因此,调用路径不是单行,而是分支的二叉树。您所看到的是树的后半部分。
combi()