2011-06-28 42 views
-1

countという属性に依存するいくつかのパラメタのデータベースを検索しています! countは、1番目のクエリが何も返さない場合にインクリメントすることができます。ここで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を実行するサンプル・コードであり、それが何かを返すdoesntの、私はcountをインクリメントし、再度クエリを実行したいと思います。これは、すべてのキーが値を持つまで、sls辞書のすべてのキーに対して実行されます!!ここで

+0

を返すよう、あなたは、あなたのsearch_from_sourcelist関数になっているはずですので、私はあなたが何を「再帰的」な手段を理解していません。 – geoffspear

+0

@Wooble、それはまさに私がやりたいことです! – user739807

+0

私の編集を見てください –

答えて

3

は、最も基本的な再帰関数は、あなたがそのカウントダウンがあなたを介してすべての道を、この場合には、修正された引数で自身を返すのnが、-1、そう、あなたが実際にこれを続いた場合に気づくでしょう

def countdown(n): 
    if n == 0: 
     return "Blastoff" 
    else: 
     print "T minus %s" % n 
     return countdown(n-1) 

でしょうですだから今は、このようにあなたのコードが

再帰的ではありません、あなたが実際にあなた自身の関数の呼び出しを返すことはありません実現するように再帰関数に見えるかを理解 - (>コールを示す)

countdown(5) -> countdown(4) -> countdown(3) -> countdown(2) -> countdown(1) -> countdown(0) #stop 

取得

私たちはタスクを最も単純な形に煮詰めてそこから作業したいので再帰を使います。その良い例はmcnuggetsの問題です。だから、あなたが達成しようとしていることと、それがより小さな問題(あるいはもっと重要な理由)になる方法を教えてください。 Pythonは標準で末尾に再帰的ではないので、スタック深度を吹き飛ばさないことを覚えておいてください。

+0

私は再帰がないという事実を認識しています。 – user739807

+0

完璧な、私は繰り返しメソッドが欲しかった! – user739807

1

再帰は、最初の問題を「より小さいバージョンのもの」に減らす方法を見つけるときに便利です。

標準の例では、n-1の階乗を計算するnの階乗を計算する問題を軽減ここで階乗関数

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

です。

コードには、このような「削減」はありません。値を増やして同じ問題をもう一度やり直すだけです。したがって、私はそれを繰り返し解決することをお勧めします。

+0

ああ、私は実際には欺瞞が必要ない!ありがとう – 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 

をしかし、あなたが本当に再帰的にこれを行うにはしたくない場合は、次のように、あなたがそれを行うことができ、コメントを残して、私はそれを書きます。

さらに、それは常にあなたがどこでも自分自身を呼び出して、あなたのコード内の関数を持っていないNone

関連する問題