递归练习中更优化的代码

时间:2014-05-17 06:50:18

标签: python recursion

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

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

1 个答案:

答案 0 :(得分:0)

如果您要使用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