为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2021-12-26 14:42:49
这段代码接受一串字母、数字、符号,(几乎任何东西)将数字拉出并将它们连接到一个字符串上并输出数字列表。我正在寻找一种方法来使其成为递归函数。试图在当前位置之后调用字符串位置以使其递归,但无法告诉何时停止(终止条件)使其处于无限循环中。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:])

不要忘记删除您想用递归替换的循环。

作为一种心理模型,将此视为处理项目的一种方式。您可以通过将项目排成一行并走过它们(循环/迭代)或将它们放在堆栈上并从顶部选择第一个直到堆栈为空(递归)来处理项目。


查看完整回答
反对 回复 2021-12-26
?
婷婷同学_

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)


查看完整回答
反对 回复 2021-12-26
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信