谁能帮我把这个函数转换成递归函数?

这段代码接受一串字母、数字、符号,(几乎任何东西)将数字拉出并将它们连接到一个字符串上并输出数字列表。我正在寻找一种方法来使其成为递归函数。


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


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

分别


BIG阳
浏览 122回答 2
2回答

开心每一天1111

虽然可以使任何事物递归,但请始终牢记递归是有代价的。这通常是维护成本,因为该算法使必须使其工作的人感到困惑。在您的情况下,一个好的停止条件是“空字符串”。切断您处理过的字符并递归调用自己getdigits(entered[1:])不要忘记删除您想用递归替换的循环。作为一种心理模型,将此视为处理项目的一种方式。您可以通过将项目排成一行并走过它们(循环/迭代)或将它们放在堆栈上并从顶部选择第一个直到堆栈为空(递归)来处理项目。

婷婷同学_

解决这个问题的简单方法是初始化一个变量空字符串(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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python