2014-03-28 4 views
1

서문 : 이전에 데이터 구조 및 알고리즘 클래스에서 수행 한 시험에 대한 WAS입니다.목록 비교; 고유 목록을 반환합니다. - Python

질문 :이 함수를 수정하여 L1 및 L2에있는 항목의 정렬 된 목록을 반환하도록합니다. 예를 들어, 주어진 [1,2,3,4,5], [0,2,3,5,8] 함수는 [2,3,5]를 반환해야합니다. 함수는 어떤 식 으로든 재귀를 사용해야합니다. 문이 목록은 앞으로 각 목록의 각 요소가 서로에 대해 검사 받고 확인하고 밀어 만약 내가 기본 사용

def merge(L1, L2): 
     if L1 == []:     
      return L1 
     elif L2 == []:    
      return L2 
     elif L1[0] < L2[0]:   #Push L1 forward 
      return merge(L1[1:], L2) 
     elif L1[0] > L2[0]:   #Push L2 forward 
      return merge(L1, L2[1:]) 
     elif L1[0] == L2[0]:  #If same element, return element 
      return L1[:1] + merge(L1[1:], L2[1:]) 

:

def merge(L1, L2): 
     if L1 == []: 
      return L2 
     elif L2 == []: 
      return L1 
     elif L1[0] <= L2[0]: 
      return L1[:1] + merge(L1[1:], L2) 
     else: 
      return L2[:1] + merge((L1, L2[1:]) 

내가 할 수있는 기능을 수정했습니다. 그것은 늦었되었고, 내 앞의 코드는 반환 유지 [2,3,5,8], 내가 원래했기 때문에 :

L1 그것이 L2.I의 나머지를 반환 소진 된
if L1 == []: 
     return L2 
    elif L2 == []: 
     return L1 

다음 코드를 다시 입력했다 실수로 넣었습니다.

if L1 == []: 
     return L1 
    elif L2 == []: 
     return L2 

그리고 효과가있었습니다. 출력이 나에게 이해가되지 않습니다 [2,3,5]하지만

내 질문

은 다음과 같습니다 할 이유

처음 두 지친 목록을 반환 진술은 나에게 출력을 주면 [2 , 3,5]?

빈 목록을 반환하는 것이 재귀 함수에서 벗어나는 이유는 무엇입니까?

마지막으로, 재귀 함수에서 내 목록이 고갈 된 경우 if 문 체인을 벗어날 수 있습니까?

+1

나는 당신의 질문의 마지막 부분을 이해하지 않았다
성명은 또한으로 수정할 수 있습니다. 설명해 주시겠습니까? – thefourtheye

+0

죄송합니다. 마지막 질문은 무시해도 좋습니다. 그것은 반복이다. 처음 두 문이 설명 될 때까지 어떻게 작동하는지 이해하지 못했습니다. 그것들은 나의 기본적인 경우들입니다. – Aimforchris

답변

3

지쳐있는 목록을 반환하는 최초의 두 if 문의 결과가 [2,3,5] 인 이유는 무엇입니까?

목록 중 하나에 요소가 남아 있지 않으면 빈 목록과 나머지 목록 사이에 공통점이 없습니다.

왜 빈 목록을 반환하는 것은 재귀 함수에서 벗어 났습니까?

return L1return L2은 재귀의기본 조건이다. 일단 충족되면, 우리는 명확한 가치 (재귀 수준이 아님)를 얻었습니다. 재귀를 결정하지 않는 한, 기본 조건이 충족되면 재귀가 풀리고 결과가 반환됩니다.

0

두 목록의 교차점을 찾고 싶습니다. 따라서 목록 중 하나가 비어 있으면 교차 목록이 []이므로 빈 목록을 반환해야합니다.

출력 복귀 [2,3,5] 이전 재귀 호출이 상기 문에서 그러므로

elif L1[0] == L2[0]: 
    return L1[:1] + merge(L1[1:], L2[1:]) 

있기 때문에, 추가되어야하는 유일한 요소 모두에 공통 인 사람 것 기울기.

return L1[0] + merge(L1[1:], L2[1:]) #add the common element and merge the remaining parts