递归练习中一个更优化的代码

2024-05-19 15:05:43 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个新手程序员,在做递归练习时,下面的函数接受两个数字,并返回一个逗号分隔的字符串,其中所有数字都位于起始数字和结束数字之间,包括两个数字。我使用了一个列表,将其转换为set,最后再次转换为字符串。字符串但我相信有更好的方法来解决它。有什么建议吗?你知道吗

def numbersInbetween(a, b):
    if a > b:
        return "Invalid"
    elif a == b:
        return str(b) 
    else:
        alist = range(a,b+1,1)
        aset = set(alist)
        aset2 = ','.join(str(s) for s in aset)
        numbersInbetween(a+1, b)
        return aset2

Tags: 方法函数字符串列表return数字程序员逗号
1条回答
网友
1楼 · 发布于 2024-05-19 15:05:43

如果要使用range,则根本不需要执行递归:-)

def numbersInbetween(a, b):
    if a > b:
        return "Invalid"
    elif a == b:
        return b
    else:
        return "{}, {}".format(a, numbersInbetween(a + 1, b))

print numbersInbetween(1, 10)
# 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

我们递归生成从下一个元素到这一行结束的字符串

return "{}, {}".format(a, numbersInbetween(a + 1, b))

我们保留当前的数字a,然后用a + 1b再次调用相同的函数。因此,对于输入1和输入3,评估将这样进行

{}, {}.format(1, numbersInbetween(2, 3))

然后呢

"{}, {}".format(1, "{}, {}".format(2, numbersInbetween(3, 3)))

这将成为

"{}, {}".format(1, "{}, {}".format(2, 3))

这将成为

"{}, {}".format(1, "2, 3")

最后变成了

1, 2, 3

相关问题 更多 >