Как написать эту итеративную функцию, чтобы быть рекурсивным? - PullRequest
1 голос
/ 05 ноября 2019

Мне нужно написать эту итеративную функцию, чтобы сделать то же самое, но она должна быть рекурсивной.

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 голосов
/ 05 ноября 2019

Если я правильно понимаю, вы хотите проверить, симметрична ли строка с кодом в 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).

0 голосов
/ 05 ноября 2019

Просто проверьте кончик и хвост, продолжайте со строкой без них:

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