我正在查询一些依赖于count
属性的参数的数据库!如果第一个查询没有返回任何内容,count
可以递增。这是一个示例代码
sls = {(213.243, 55.556): {}, (217.193, 55.793): {}, (213.403, 55.369): {}}
for key in sls.keys:
if not sls[key]:
ra, dec = key[0], key[1]
search_from_sourcelist(sl, ra,dec)
count = 1
def search_from_sourcelist(sl, ra,dec):
dist = count/3600.0
sls[(ra,dec)] = sl.sources.area_search(Area=(ra,dec,dist))
return
如果我运行方法search_from_sourcelist
,它不会返回任何内容,我想增加count
,然后再次执行查询。这是为sls字典中的所有键完成的,直到所有键都有值!!
答案 0 :(得分:3)
这是最基本的递归函数
def countdown(n):
if n == 0:
return "Blastoff"
else:
print "T minus %s" % n
return countdown(n-1)
你会注意到倒计时返回自己带有一个修改过的参数,在这种情况下n但是-1,所以如果你真的一直遵循这一点你会得到 ( - >表示通话)
countdown(5) -> countdown(4) -> countdown(3) -> countdown(2) -> countdown(1) -> countdown(0) #stop
所以现在你明白了一个递归函数看起来你意识到你从未真正返回自己函数的调用,因此你的代码不是递归的
我们使用递归,因为我们希望将任务简化为最简单的形式,然后从那里开始工作,所以一个很好的例子就是mcnuggets问题。因此,您需要告诉我们您要实现的目标以及如何将其作为一个较小的问题(或更重要的是为什么。)您确定不能迭代地执行此操作吗?记住你不想破坏你的堆栈深度,因为python不是标准的
尾递归答案 1 :(得分:1)
当您找到将初始问题缩减为“较小版本”的方法时,递归非常有用。
标准示例是阶乘函数
def fac(n):
return n * fac(n-1) if n > 1 else 1
在此,您可以减少计算n
的阶乘以计算n-1
的阶乘的问题。
在你的代码中没有这样的“减少”。您只需递增一个值并再次启动相同的问题。因此,我建议你迭代地解决它。
答案 2 :(得分:1)
我不确定你需要一个递归算法。
Incase i run the method search_from_sourcelist, and it doesnt return anything, i would like to increment count, and do the query again
。这可以通过while循环完成,如下所示:
for key, value in sls.iteritems():
if not value:
ra, dec = key[0], key[1]
count = 1
while not search_from_sourcelist(sls, ra, dec):
count += 1
但如果你真的想以递归的方式做这件事,你可以按照以下方式进行,留下评论并写下来。
此外,您应该查看search_from_sourcelist
函数,因为它始终返回None