Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Python迭代函数_Loops_Iteration - Fatal编程技术网

Loops Python迭代函数

Loops Python迭代函数,loops,iteration,Loops,Iteration,我有一个下面的函数,它可以找到两条轨迹之间的距离,函数recMethod()是递归函数。我想把这个递归函数转换成迭代函数 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

我有一个下面的函数,它可以找到两条轨迹之间的距离,函数recMethod()是递归函数。我想把这个递归函数转换成迭代函数

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]

您只需要按照正确的顺序填写表ca,在本例中,从0,0到len(p)-1,len(Q)-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]

你试过什么吗?:)请看一看这篇hande文章,我试图转换为尾部调用递归,但错误太多了。