2011-06-28 31 views
-1

我正在查询某个参数的数据库,这些参数取决于称为count的属性! count可以递增,因为第一个查询不返回任何内容。下面是一个示例代码python,如何编写一个迭代函数

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

你没有的功能在你的代码调用自身的任何地方,所以我不知道你明白什么“递归”的意思。 – geoffspear

+0

@Wooble,那正是我想要做的! – user739807

+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不是标准的递归尾递归

+0

我知道这个事实,没有递归,这就是我需要帮助! – user739807

+0

完美,我想要一个迭代方法不递归! – user739807

1

当您找到一种方法将初始问题简化为“自身的较小版本”时,递归非常有用。

标准的例子是阶乘函数

def fac(n): 
    return n * fac(n-1) if n > 1 else 1 

在这里,您减少计算n的阶乘计算n-1阶乘的问题。

在你的代码中没有这种“减少”。您只需增加一个值并重新开始相同的问题。因此,我建议你反复解决它。

+0

哦,是的,我其实不需要recusion!谢谢 – user739807

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