因此,我正在复习我的类,正如标题所示,我试图从递归函数返回一个列表,其中包含可被3或5整除的正值,但不能同时包含这两个值。例如,div_by_3_xor_5(20)
应该返回[3, 5, 9, 10, 12, 18, 20]
,其中15
缺失,因为它可以被3和5整除
我找出递归解决方案的方法通常是首先将其作为常规循环编写,然后查看需要调整哪些内容才能将其转换为递归函数。此函数的常规循环函数非常简单:
def div_by_3_xor_5(n):
a_list = []
for i in range(3, n + 1):
div_by_3 = (i % 3 == 0)
div_by_5 = (i % 5 == 0)
if div_by_3 and div_by_5:
pass
elif div_by_3 or div_by_5:
a_list.append(i)
return a_list
# correct output for div_by_3_xor_5(20): [3, 5, 9, 10, 12, 18, 20]
我曾尝试将其转换为递归函数,但输出错误
def div_by_3_xor_5(n, k = 3):
if k >= n:
return [n]
for i in range(k, n + 1):
div_by_3 = (i % 3 == 0)
div_by_5 = (i % 5 == 0)
if div_by_3 and div_by_5:
pass
elif div_by_3 or div_by_5:
return [i] + div_by_3_xor_5(n, k + 1)
# incorrect output for div_by_3_xor_5(20):
# [3, 5, 5, 6, 9, 9, 9, 10, 12, 12, 18, 18, 18, 18, 18, 18, 20, 20]
有谁能帮我找出哪里出了问题,让我返回[3, 5, 6, 9, 10, 12, 18, 20]
每次你都需要让递归作用于问题的一小部分
这里是一种分而治之的递归形式,尽管在我看来,强制将递归适应到这个需求中是一种真正的延伸
为了获得额外的保护,您可能需要测试
hi<lo
多亏了卡尔的评论,我又看了一遍我的代码才明白。我试图在不可被3或5整除的整数上循环,但我可以通过递归调用下一个整数来实现。谢谢你,卡尔
相关问题 更多 >
编程相关推荐