【问题标题】:Recursion with palindromes回文递归
【发布时间】:2021-06-30 18:21:13
【问题描述】:

我有一个 python 的递归语句。

声明

回文

回文是一个向后读和向前读相同的词(女士、中午、雷达……)。 编写一个程序,它读取一个字符串并打印所有回文,这些回文可以通过删除字符串中的一些字符来获得。生成的回文不必是英文单词!*

限制:

  • 不要打印长度为 1 的回文(单字母回文)。
  • 每个回文只打印一次。

我编写了以下完美运行的代码,但在第二个定义的函数中我没有使用递归,因为我不知道如何处理这部分语句。 如果有人可以帮助我,我将不胜感激。

def find_subsets(seq, n):
    if n != 0:
        result = []
        subsets = find_subsets(seq, n-1)
        for subset in subsets:
            result += [subset]
            result += [[seq[n-1]] + subset]
        return result
    else:
        return [[]]
def check_palindrome(subsetsList):
    finalList = []
    for x in subsetsList:
        if x[::-1] == x and len(x)>1:
            string = " ".join(x)
            print(string)
        else:
           continue
word = input("Write string: ")
check_palindrome(find_subsets(word, len(word)))

【问题讨论】:

  • 为什么check_palindrome需要用到递归?

标签: python string recursion substring palindrome


【解决方案1】:

实现check_palindrome 递归版本的一种方法是将for 循环替换为对check_palindrome 的调用。但是,为了避免无限循环,您需要从列表中删除一个值并对其进行处理,从而在每次递归调用时将 subsetsList 缩小 1。最后,您需要检查 subsetsList 何时变为空并退出该点的递归。

例子:

def check_palindrome(subsetsList):
    if not subsetsList:
        return
    
    x = subsetsList.pop()
    if x[::-1] == x and len(x)>1:
        string = " ".join(x)
        print(string)
    
    check_palindrome(subsetsList)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多