tôi nhắc đến nhiều câu hỏi ở đây về đệ quy nhưng tôi không thể hiểu làm thế nào đệ quy làm việc cho vấn đề này cụ thể: chương trình đệ quy để có được tất cả sự kết hợp của các nhân vật trong một chuỗi bằng Python:Hiểu và hình dung đệ quy
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')
Tôi đã in nó các giá trị để tôi có thể thấy những gì đang xảy ra. Đây là kết quả:
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
Full đầu ra: http://pastebin.com/Lg3pLGtP
Như tôi đã trình bày trong đầu ra, làm thế nào tiền tố trở thành 'ab'?
Tôi đã cố gắng hình dung các cuộc gọi đệ quy cho combi (tiền tố + s [0], s [1:]). Tôi có hiểu nó đúng không?
Tôi nghĩ cuộc gọi thứ 2 đệ quy tức là 'combi (tiền tố, s [1:]) ' sẽ bắt đầu như 'combi ('', 'bc')' và mặc dù quá trình tương tự tạo thành b, bc. Ở đây ở bước cuối cùng s [0] là 'c' và khi đệ quy tiền tố + s [0] trở thành '' + c = c nếu tôi hiểu đúng? Btw, tôi đã thêm một liên kết trong quá khứ của đầu ra hoàn chỉnh cho câu hỏi. – Bharat
Nếu bạn đã quen thuộc với tìm kiếm theo chiều sâu, đó là cách cây Amber đề cập đang được duyệt qua (hoặc được tạo, tùy thuộc vào cách bạn muốn xem nó). – kevintodisco
@RBK: Đó là cuộc gọi cho 'combi (' a ',' c ') '* từ *' combi (' a ',' bc ') 'đang tạo' tiền tố thứ hai =' a'' thứ hai. – Amber