这是迭代版本。如何使用递归代码获得相同的结果?
def it(word):
set1 = set()
for begin in range(len(word)):
for end in range(begin,len(word)):
set1.add(word[begin:end+1])
return set1
这就是我所拥有的,但它并没有给每个子串返回
def recursievesubstring(string):
lijst = []
if len(string) == 0:
lijst.append("")
else:
i = 0
if len(string) > 1:
midden = len(lijst)//2
lijst.append(string[midden+1])
while i < len(string):
lijst.append(string[:i])
lijst.append(string[i:])
recursievesubstring(string[i:-i])
i+=1
return lijst
def main():
string = input("Geef een woord: ")
print(recursievesubstring(string))
答案 0 :(得分:1)
您需要制作可以采用更多参数的辅助方法。 (尾递归)如果限制是编写递归函数,则不能使用任何for或while循环。
答案 1 :(得分:1)
为此,我们需要了解迭代函数的工作原理,简单的打印将有助于
def it(word):
set1 = set()
for begin in range(len(word)):
for end in range(begin,len(word)):
set1.add(word[begin:end+1])
print(word[begin:end+1])
print()
return set1
一个简单的测试揭示了一个有用的模式
>>> x=it("abcdef")
a
ab
abc
abcd
abcde
abcdef
b
bc
bcd
bcde
bcdef
c
cd
cde
cdef
d
de
def
e
ef
f
>>>
使目标更清晰,辅助函数接受一个字符串并删除最后一个字符或每次更大一些子字符串,而main函数将删除每个递归调用中的第一个字符。
现在我不会给你一个有效的代码,而是一个使用tail recursion的模板,供你完成
def recur_aux(word, result=None, end=None):
if result is None:
result = set()
if end is None:
end = # an adequate default value
if #an adequate stop condition, aka base case:
return result
else:
#do an adequate step
return recur_aux( word, result, #end + or - 1 )
def recur(word,result=None):
if result is None:
result = set()
if word: #this is equivalent to len(word)!=0
#do a adequate step calling recur_aux
return recur( # an adequate recursive call )
else:
return result
尝试一下,然后像这样进行测试
>>> it("abcdef") == recur("abcdef")