Python最大深度递归错误 - 基本情况的问题

时间:2015-07-07 19:42:11

标签: python string recursion runtime-error

我编写了一个python函数replace_str,它消耗了3个非空字符串,base,target和rep。

第一个字符串base表示要更新的基本字符串。第二个字符串target表示要替换的目标字符串,第三个字符串rep表示将替换更新后的字符串中的目标的字符串。

该函数生成一个新字符串,其中目标字符串由基本字符串中的rep字符串替换,但如果满足以下任一条件,则生成相同的基本字符串。

•如果在基本字符串中找不到目标字符串,或

•如果目标和代表是相同的字符串。

不允许使用字符串方法replace和find

这是我到目前为止所做的:

def replace_str(base, target, rep): 
    m = 0
    n = len(target)
    if base[m:n] == target:
        new_base = base[0:m] + rep + base[n:]
        return replace_str(new_base, target, rep)
    else:
        m = m + 1
        n = n + 1
        return replace_str(base, target, rep)

我测试程序时出现最大递归深度错误。我正在尝试各种基本情况,因为我的功能卡住了,但我试过的所有基本情况都给了我''''或者基地的最后一个字母

replace_str("aaaax","aa","x")应生成'aax',但会给我一个错误。

然而,

replace_str("aa", "aa", "x")给了我'x'的正确结果。

此外,这篇文章并不是另一篇文章的副本。链接帖子的程序完全不同,有不同的问题。我的基本情况有问题。

1 个答案:

答案 0 :(得分:0)

else分支机构中,您更新了mn,但是您无法将这些值传递给下一次调用replace_str,这最终会从开始。

您需要添加mn作为参数,或者将函数的该部分转换为循环。

使用额外的参数更容易,看起来像这样:

# adding m and n as arguments
def replace_str(base, target, rep, m=0, n=None):
    if n is None:
        n = len(target)
    ...

你还需要一个基本案例,其中最简单的可能是:

# adding m and n as arguments
def replace_str(base, target, rep, m=0, n=None):
    if target not in base:
        return base
    if n is None:
        n = len(target)
    ...