2017-06-10 24 views
0

私は2つの軌跡の間の距離を求める次の関数を持っています。関数recMethod()は再帰関数です。この再帰関数を反復関数に変換したい。Python反復関数

あなただけのLEN(Q)、(P)-1をlenのために0,0から、この場合には、正しい順序でテーブルCAに記入する必要が-1それを行うには 一つの方法は次のようになり
def dist(pt1,pt2): 
    return math.sqrt((pt2[0]-pt1[0])*(pt2[0]-pt1[0])+(pt2[1]-pt1[1])*(pt2[1]-pt1[1])) 

def recMethod(ca,i,j,P,Q): 
    if ca[i,j] > -1: 
     return ca[i,j] 
    elif i == 0 and j == 0: 
     ca[i,j] = euc_dist(P[0],Q[0]) 
    elif i > 0 and j == 0: 
     ca[i,j] = max(recMethod(ca,i-1,0,P,Q),euc_dist(P[i],Q[0])) 
    elif i == 0 and j > 0: 
     ca[i,j] = max(recMethod(ca,0,j-1,P,Q),euc_dist(P[0],Q[j])) 
    elif i > 0 and j > 0: 
     ca[i,j] = max(min(recMethod(ca,i-1,j,P,Q),recMethod(ca,i-1,j-1,P,Q),recMethod(ca,i,j-1,P,Q)),euc_dist(P[i],Q[j])) 
    else: 
     ca[i,j] = float("inf") 
    return ca[i,j] 
+1

何か試しましたか? :) – dizpers

+0

このハンド記事を見てくださいhttp://blog.moertel.com/posts/2013-05-11-recursive-to-iterative.html – dizpers

+0

私はテールコール再帰に変換しようとしましたが、多すぎるエラーです。 – Liza

答えて

1

def iterative(ca, P,Q): 
    ca[0,0] = euc_dist(P[0],Q[0]) 
    for ii in range(1,len(P)): 
     ca[ii,0] = max(ca[ii-1,0], euc_dist(P[ii],Q[0])) 
    for jj in range(1,len(Q)): 
     ca[0,jj] = max(ca[0,jj-1], euc_dist(P[0],Q[jj])) 
    for ii in range(1,len(P)): 
     for jj in range(1,len(Q)): 
      ca[ii,jj] = max(min(ca[ii-1,jj], 
           ca[ii-1,jj-1], 
           ca[ii,jj-1]), 
          euc_dist(P[ii],Q[jj])) 
    return ca[-1,-1]