【问题标题】:How to write this iterative function to be recursive?如何将这个迭代函数写成递归的?
【发布时间】:2019-11-05 13:14:50
【问题描述】:

我需要编写这个迭代函数来做同样的事情,但它必须是递归的。

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。

【问题讨论】:

    标签: python recursion


    【解决方案1】:

    只检查tip和tail,继续没有它们的字符串:

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

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想检查一个字符串是否与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).

      【讨论】:

        猜你喜欢
        • 2012-07-01
        • 2023-03-20
        • 2019-03-01
        • 1970-01-01
        • 2021-12-09
        • 2015-02-11
        • 2016-08-13
        • 1970-01-01
        • 2018-10-16
        相关资源
        最近更新 更多