2017-11-13 21 views
2

작은 충돌 확인 기능을 쓰고 있습니다. 'is_collision'함수가 'True'를 반환하면 'extend_until'함수는 모든 재귀 함수의 실행을 멈추고 해당 루프의 시작점을 반환해야합니다. 어떻게 실행해야하는지 잘 모르겠습니다. 초기 시작 따라서 1.0 길이를 따라 기기와의 해상도에서 조건 기능 '까지 확장'경우재귀 루프 종료 - 파이썬

def is_collision(query): 
    print "Collision occurred" 
    return True 


def extend_until(start, goal): 
    if goal-start <= 1.0: 
     if is_collision(goal): 
      # if YES all recursion should stop and return. 
      return start 
    else: 
     midpoint = (start+goal)/2 
     extend_until(start, midpoint) 
     extend_until(midpoint, goal) 

    return goal 

if __name__ == '__main__': 
    p1 = 0 
    p2 = 4 
    new_configuration = extend_until(p1, p2) 
    print new_configuration 
+0

여기에서 재귀를 사용하고 있지 않습니다. 재귀 적으로 만들려면 함수를 반환해야합니다. else loop 안에서'extend_until (start, midpoint)'대신에'return extend_until (start, midpoint)'가 될 수 있습니다. 그러나 거기서 사용하는 진술은 2 가지입니다. 또한 '복귀 목표'가 없어야합니다. 이 설정에서는 작동하지 않습니다. 함수 extend_until에 입력과 출력을 정확히 알려주고 정확히 무엇을해야하는지 알려주세요. – Abhijeetk431

+0

'extend function'에 대한 입력은 대개 2 포인트입니다. 이 경우 점은 1 차원입니다. 목표 : 주어진 두 입력 점 사이의 거리 (위의 경우 해상도가 1.0 임)를 이산화하고 충돌이없는 경우 각 불연속 점을 확인합니다. 충돌 함수가 True를 반환하면 전체 재귀가 중지되고 값을 반환해야합니다. – BhanuKiran

+0

그리고 정확히 수행해야 할 기능은 무엇입니까? – Abhijeetk431

답변

0

이 충분한

def is_collision(start, goal): 
    if goal-start <= 1.0: 
     print('Collision occurred') 
     return True 
    return False 


def extend_until(start, goal): 
    print("Start is: "+str(start)) 
    if is_collision(start, goal): 
     # if YES all recursion should stop and return. 
     return goal-start 
    else: 
     #midpoint = (start+goal)/2 
     #extend_until(start, midpoint) 
     start = start + 1 
     return extend_until(start, goal) 

if __name__ == '__main__': 
    p1 = 0 
    p2 = 4 
    new_configuration = extend_until(p1, p2) 
    print('New Configuration is: '+ str(new_configuration)) 

출력 : -.?

Start is: 0 
Start is: 1 
Start is: 2 
Start is: 3 
Collision occurred 
New Configuration is: 1 
+0

감사합니다. Abhijeetk431 당신을위한 노력. 그러나 이것은 제가 찾고있는 결과가 아닙니다. p1 = 0, p2 = 4 내 해상도는 1.0입니다. 즉, 순차적으로 [1.0, 2.0, 3.0]의 충돌을 확인해야한다는 의미입니다. 위에서 언급 한 샘플 코드에서 'is_collision'함수는 기본적으로 True를 반환합니다. 즉, is_collision (1.0)을 검사하면 True를 제공하고 모든 것은 1.0을 반환하고 new_configuration에 할당해야합니다. – BhanuKiran

+0

이전 답변을 수정했습니다. 이 방법이 효과가 있는지 알려주세요. – Abhijeetk431