String 在word-'中递归复制字母;abcd'-&燃气轮机';aabbcc';

String 在word-'中递归复制字母;abcd'-&燃气轮机';aabbcc';,string,recursion,duplicates,letters,String,Recursion,Duplicates,Letters,我刚刚了解了什么是递归,我正试图找到一种方法来递归地复制单词中的字母。这只是一种练习的方式。如果有更好的方法不用递归,我愿意接受任何反馈。然而,我主要是想找到一个解决方案,以便在我回头看课程作业和课堂幻灯片之前阐明递归是什么。它不会打印最后一封信两次 我的代码: def makeDups(young): if len(young) <= 1: return young elif young[0] != young[1]: return 2 *

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

我的代码:

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))
def makeDups(年轻):

如果len(young)这不需要递归

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

aabbccdd

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

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

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

如果伦(杨)我发现了问题。我把第一个返回改为:return2*young如果你对递归感兴趣,我可以建议你试着解决这个难题吗?我的课下一步会讨论这个问题!谢谢哇。你刚刚介绍了一个我一直在回避的案子。非常感谢。这是Python3的更新吗?我使用了一个使用Python2ish的类。当我把它放到python编辑器中时,我得到了一个语法错误。
def makeDups(young):
    return 2 * young if len(young) <= 1 \
        else 2 * (young[0]) + makeDups(young[1:])