Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过递归获得字符串的所有连续子字符串?_Python_Python 2.7 - Fatal编程技术网

Python 如何通过递归获得字符串的所有连续子字符串?

Python 如何通过递归获得字符串的所有连续子字符串?,python,python-2.7,Python,Python 2.7,这是迭代版本。如何使用递归代码获得相同的结果 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 = [] i

这是迭代版本。如何使用递归代码获得相同的结果

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))
def recursievesubstring(字符串):
lijst=[]
如果len(字符串)==0:
lijst.附加(“”)
其他:
i=0
如果长度(字符串)>1:
midden=len(lijst)//2
lijst.append(字符串[midden+1])
当我
您需要创建可以接受更多参数的帮助器方法。(尾部递归)如果限制是编写递归函数,则不能使用任何for或while循环。

您需要创建可以接受更多参数的帮助器方法。(尾部递归)如果限制是编写递归函数,则不能使用任何for或while循环。

使此复杂的是有一个双重迭代,因此解决此问题的一种方法是为每个循环生成一个递归函数并将其组合,这意味着处理内环的辅助函数和处理外环的主函数

为此,我们需要了解迭代函数的工作原理,简单的打印将有所帮助

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

>>> 
这使得目标更加明确,辅助函数获取一个字符串,每次移除最后一个字符或获取更大的子字符串,而主函数将在每次递归调用中移除第一个字符

现在我不会给你一个工作代码,而是一个模板,供你完成

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")

复杂的是你有一个双重迭代,所以一种解决方法是为每个循环创建一个递归函数,并将它们组合起来,这意味着一个辅助函数处理内部循环,一个主函数处理外部循环

为此,我们需要了解迭代函数的工作原理,简单的打印将有所帮助

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

>>> 
这使得目标更加明确,辅助函数获取一个字符串,每次移除最后一个字符或获取更大的子字符串,而主函数将在每次递归调用中移除第一个字符

现在我不会给你一个工作代码,而是一个模板,供你完成

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")

为什么要递归?因为我的教授希望这样。你可能应该自己做作业,发布一些你已经尝试过的代码。这不是一个免费的代码站点。为什么要递归?因为我的教授希望这样。你可能应该自己做作业,发布一些你已经尝试过的代码。所以这不是一个免费的代码网站。我知道我不应该说谢谢你,但我真的很想感谢你的时间!我当然会尝试一下。我知道我不该说谢谢你,但我真的很想感谢你抽出时间!我一定要试一试。