[英]python, how to write an iterative function
我正在查询数据库中的一些参数,这些参数依赖于一个名为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 字典中的所有键执行的,直到所有键都有值!
这里是最基本的递归 function
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
所以现在您了解递归 function 看起来像您意识到您从未真正返回您自己的 function 的调用,因此您的代码不是递归的
我们使用递归是因为我们想将任务简化为最简单的形式,然后从那里开始工作,因此mcnuggets问题就是一个很好的例子。 所以你需要告诉我们你想要实现什么,以及如何将它变成一个更小的问题(或更重要的是为什么)。你确定你不能迭代地做到这一点吗? 请记住,您不想破坏堆栈深度,因为 python 不是标准的尾递归
当您找到一种方法将初始问题简化为“自身的较小版本”时,递归很有用。
标准示例是阶乘 function
def fac(n):
return n * fac(n-1) if n > 1 else 1
在这里,您将计算n
的阶乘问题简化为计算n-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
function,因为它总是返回None
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.