谁能帮助我将此功能转换为递归功能?

时间:2019-04-02 15:04:05

标签: python function recursion

此代码采用一串字母,数字,符号((几乎所有东西))将数字拉出,将它们连接到一个字符串上,并输出数字列表。我正在寻找一种使之成为递归函数的方法。

试图在当前位置之后调用字符串位置以使其递归,但无法告知何时停止(终止条件)使其陷入无限循环。

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

分别

2 个答案:

答案 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)