这段代码接受一串字母、数字、符号,(几乎任何东西)将数字拉出并将它们连接到一个字符串上并输出数字列表。我正在寻找一种方法来使其成为递归函数。试图在当前位置之后调用字符串位置以使其递归,但无法告诉何时停止(终止条件)使其处于无限循环中。def getdigits(entered): print(entered, "maps to") nums = "" for x in range (0, len(entered)): for i in range (0,9): if entered[x] == str(i): nums += entered[x] print(nums)entered = ("1.234.123[123]")getdigits(entered)entered = ("**1.23a-42")getdigits(entered)上述示例的预期输出是:123412312312342分别
2 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
虽然可以使任何事物递归,但请始终牢记递归是有代价的。这通常是维护成本,因为该算法使必须使其工作的人感到困惑。
在您的情况下,一个好的停止条件是“空字符串”。切断您处理过的字符并递归调用自己getdigits(entered[1:])
不要忘记删除您想用递归替换的循环。
作为一种心理模型,将此视为处理项目的一种方式。您可以通过将项目排成一行并走过它们(循环/迭代)或将它们放在堆栈上并从顶部选择第一个直到堆栈为空(递归)来处理项目。
婷婷同学_
TA贡献1844条经验 获得超8个赞
解决这个问题的简单方法是初始化一个变量空字符串(nums = ""):
def getdigits(entered, nums = ""):
if entered:
if entered[0] in "0123456789":
nums += entered[0]
entered = entered[1:]
# recursive
getdigits(entered, nums)
else:
# entered is empty string
print(nums)
entered = ("1.234.123[123]")
getdigits(entered)
entered = ("**1.23a-42")
getdigits(entered)
添加回答
举报
0/150
提交
取消