如何编写此迭代函数以递归?

时间:2019-11-05 13:14:50

标签: python recursion

我需要编写此迭代函数来执行相同的操作,但它必须是递归的。

def task1(string: str):
    for i in range(len(string)):
        if string[i] != string[len(string) - i - 1]:
            return False
    return True

这是我尝试过的方法,但是不起作用。

def task1_recursion(string: str):
    print(string)
    if len(string) > 1:
        if string[0] == task1_recursion(string[1::1]):
            return True
        else:
            return False
    else:
        return string

我的代码似乎是最后一个递归返回字符串“”之一,这使其返回False。

2 个答案:

答案 0 :(得分:0)

只需检查尖端和尾部,然后继续使用没有它们的弦:

def task1_recursion(string: str):
    # recursion base condition (exit condition)
    if len(string) <= 1:
        return True
    # unpack values
    first, *_, last = string
    # check if they are different
    if first != last:
        return False
    # if not continue checking the remaining string
    return task1_recursion(string[1:-1])

答案 1 :(得分:0)

如果我正确理解,您想检查一个字符串是否与task1中的代码对称。我的解决方案如下:

def fct(s: str, i: int):
    if len(s) <= 1 or i == len(s):
        return True
    return s[i] == s[len(s) - 1 - i] and fct(s, i + 1)

我测试过,fct产生的结果与task1相同。但是它需要索引的附加参数。但是,如果希望参数仅包含输入字符串,则可以将其包装在另一个函数中。调用函数时,i始终设置为0,例如fct("ABCCBA", 0)