此代码采用一串字母,数字,符号((几乎所有东西))将数字拉出,将它们连接到一个字符串上,并输出数字列表。我正在寻找一种使之成为递归函数的方法。
试图在当前位置之后调用字符串位置以使其递归,但无法告知何时停止(终止条件)使其陷入无限循环。
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)
以上示例的预期输出为:
1234123123
12342
分别
答案 0 :(得分:1)
尽管可以进行递归,但请记住,递归是有代价的。这通常是维护成本,因为该算法使必须使它起作用的人员感到困惑。
对于您来说,一个很好的停止条件是“空字符串”。切断您处理过的字符,然后使用getdigits(entered[1:])
别忘了删除您要用递归替换的循环。
作为一种心理模型,请将其视为处理项目的一种方式。您可以通过以下方式处理项目:将它们排成一行并走过去(循环/迭代),或者将它们放在堆栈上并从顶部选择第一个,直到堆栈为空(递归)。
答案 1 :(得分:0)
解决此问题的简单方法是初始化一个变量空字符串(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)