作为在递归中进行练习的新手程序员,以下函数接受两个数字并返回逗号分隔的字符串,其中包含起始编号和结束编号之间的所有数字,包括两个数字。我使用了一个列表,将其转换为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
答案 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 + 1
和b
调用相同的函数。因此,对于输入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