【问题标题】:recursively duplicate letters in word - 'abcd' -> 'aabbcc'递归复制单词中的字母 - 'abcd' -> 'aabbcc'
【发布时间】:2016-05-11 07:03:41
【问题描述】:

我刚刚学会了递归是什么,我正在尝试找到一种方法来递归地复制单词中的字母。这只是一种练习方式。如果有没有递归的更好方法,我愿意接受任何反馈。但是,我主要是想找到一个解决方案,以便在我回去查看课程作业和讲座幻灯片之前阐明什么是递归。它不会两次打印最后一个字母。

我的代码:

def makeDups(young):
    if len(young) <= 1:
        return young
    elif young[0] != young[1]:
        return 2 * (young[0]) + makeDups(young[1:])
    else:
        return makeDups(young[1:])

young = 'abcdefg'
print(young)
print(makeDups(young))

【问题讨论】:

  • 我发现了问题。我把第一个返回改成这个:return 2 * young
  • 如果你对递归感兴趣,我建议你尝试解决Towers of Hanoi这个难题。
  • 我的课接下来要复习了!谢谢!

标签: string recursion duplicates letters


【解决方案1】:

这不需要递归。

echo "abcd" | perl -pe 's/(.)/$1$1/g'

输出:

aabbccdd

【讨论】:

  • 当我把它放到我的 python 编辑器中时,我得到一个语法错误。
【解决方案2】:

您的解决方案也无法复制已经翻倍的字母。例如,“aabc”应该返回“aaaabbcc”,对吗?您特别避免了这种情况,而是返回“aabbcc”。

更正是消除该测试,促进对 else 子句的递归调用:

def makeDups(young):
    if len(young) <= 1:
        return 2 * young
    else:
        return 2 * (young[0]) + makeDups(young[1:])

最后,最后一次 Pythonic 更新:您的代码足够干净,可以将其变成一条语句:

def makeDups(young):
    return 2 * young if len(young) <= 1 \
        else 2 * (young[0]) + makeDups(young[1:])

【讨论】:

  • 哇。你刚刚介绍了一个我一直在回避的案例。非常感谢。
  • 这个更新是针对 python 3 的吗?我正在上一门使用 python 2ish 的课程。
猜你喜欢
  • 2017-05-14
  • 2020-01-29
  • 2015-11-18
  • 2015-08-22
  • 2014-11-21
  • 1970-01-01
  • 2022-11-25
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多