首页 > 解决方案 > Python递归(可能是递归内的递归?)将例如字符串划分为子字符串(每个子字符串都可以有更多的子字符串)

问题描述

我对递归函数的经验很少,但现在我有一个问题,我认为可以更容易地递归解决。我也想借此机会最终了解有关递归函数的更多信息。

问题:
我有一些输入字符串可以细分为例如 3 个部分(但假设我事先不知道有多少部分)并且每个部分都可以进一步细分为 sub_parts 等。

示例:
full_string = "[Part1:[Part1 的许多子部分]] 和 [Part2:[Part2 的许多子部分]] 和 [Part3:[Part3 的许多子部分]]"

调用函数 recursive_func(full_string) 后,full_string 将被细分为:

  1. 第一次运行的结果:[Part1:[Part1 的许多 sub_parts]]
  2. 第二次运行的结果:[Part2:[Part2 的许多 sub_parts]]
  3. 第三次运行的结果:[Part3:[Part3 的许多子部分]]

我的功能在这里停止。但我希望它现在对 sub_parts 做同样的事情。然后每个 sub_part 可以存在更多的 sub_parts 等。

所以所需的输出看起来像这样:

输入: full_string = [Part1:“[Part1 的子部分]] 和 [Part2:[Part2 的子部分]] 和 [Part3:[Part3 的子部分]]”

recursive_func(full_string)

输出:

输出:

Part1
    sub_part1
        sub_sub_part1
        sub_sub_part2
        sub_sub_partx
    sub_partX
        sub_sub_part1
        sub_sub_part2
            ...
        sub_sub_partx
            ...
                ...
                    ...
Part2
    sub_part1
        sub_sub_part1
        sub_sub_part2
        sub_sub_partx
PartX
    sub_part1
        sub_sub_part1
        sub_sub_part2
        sub_sub_partx
            sub_sub_sub_partx
                ...

所以基本上我只得到第一级输出(Part1,Part2,Part3),我不知道设置这个递归以包含所有 sub_parts(及其 sub_sub_parts 等)的合理方法是什么。

这是我的功能。我用伪代码替换了其中的大部分内容,这样我想做什么就有点清楚了。

def recursive_func(s, result=None, i = 0):

    print(i)

    if result is None:
        result = []

    if THERE IS AT LEAST ONE PART LEFT TO BE EXTRACTED IN THE STRING:

        EXTRACT ONE PART CALLED f_str

        # Append this part to the result
        result.append(f_str)

        # remove the part from the string
        s = s.replace(f_str,"", 1)

        return drill_down(s, result, i+1)
    
    # I am thinking that maybe here i would need to start another recursion?
    return result

标签: pythonrecursion

解决方案


推荐阅读