【发布时间】:2022-01-09 03:35:05
【问题描述】:
“给定一个由字母和特殊字符/数字组成的字符串,使用递归将字母连接成一个字符串并返回。”
我的代码在下面,我仍在学习递归并一直在尝试跟踪它。我在这段代码中尝试了一堆不同的行,但我不知道如何修复我目前所拥有的:
def decoder(encryptedStr):
if len(encryptedStr) != 0:
if encryptedStr[0].isalpha() == True:
decoded = encryptedStr[0]
decoded.join(decoder(encryptedStr[1:]))
print(decoded)
else:
decoder(encryptedStr[1:])
我还没有让它返回任何东西,因为我正在努力解决我必须将新字母加入输出字符串的部分。而不是 .join 我也尝试过:
decoded += decoder(encryptedStr[1:])
但它不起作用 bc Nonetype??
【问题讨论】:
-
您在
else部分中缺少return,但无论如何算法似乎都是错误的。 -
我认为这并不重要,但如果没有额外的步骤,基于一次一个字符递归的典型答案仅适用于具有 1000 个或更少字符的字符串。
-
Python 是学习递归的糟糕语言选择,原因有几个。反复切片字符串非常昂贵。即使您对解决该问题的智能高效算法有想法,
decoder(encryptedStr[1:])之类的表达式也将确保算法的时间复杂度不会优于 n^2。 -
一个简单的pythonic解决方案,没有递归将是
def(encrypted_str): return ''.join(c for c in encrypted_str if c.isalpha())。如果你真的想用递归来解决这个问题,我建议选择python以外的任何其他语言。
标签: python python-3.x string recursion concatenation