2016-09-09 1 views
-1

두 함수를 결합하는 재귀 사용 방법은 무엇입니까? "move_zeros"의 답을 알고 있습니다. 그러나 여기에서는 재귀를 사용하고 해결하는 방법을 배우고 싶습니다. 재귀 문제.두 가지 함수를 하나의 함수로 결합하는 방법이 있습니까?

나는 다음과 같은 시도 2 ​​

def move_zeros(array): 
    for i in range(len(array)): 
     if array[i] is not False and array[i] == 0: 
      move_zeross(array) 
    return array 

FUNC 1

def move_zeross(array): 
    for i in range(len(array)): 
     if array[i] is not False and array[i] == 0: 
      array.pop(i) 
      array.append(0) 
    return array 

FUNC하지만 RuntimeError이 발생합니다

def move_zeros(array): 
    for i in range(len(array)): 
     if array[i] is not False and array[i] == 0: 
      array.pop(i) 
      array.append(0) 
     move_zeros(array) 
    return array 
:

여기
RuntimeError: maximum recursion depth exceeded in cmp 

가 결합 된 코드입니다 그냥 마지막에 목록에있는 모든 0을 이동하려면

+0

가능한 [Python Quicksort 런타임 오류 : 최대 재귀 깊이가 cmp를 초과했습니다] (http://stackoverflow.com/questions/25105541/python-quicksort-runtime-error-maximum-recursion-depth-exceeded-in- cmp) –

답변

1

, 시도 :

def move_zeros(array): 
    result = [x for x in array if x is not 0] 
    return result + [0]*(len(array)-len(result)) 

재귀 사용 :

def move_zeros(array, n=None): 
    if n is None: 
     n = len(array) - 1 
    if n < 0: 
     # no more to process 
     return array 
    if array[n] is 0: 
     # move this zero to the end 
     array.append(array.pop(n)) 
    return move_zeros(array, n-1) 
+0

예, 답을 알고 있습니다. 재귀 학습을위한 질문 만 게시하고 재귀 문제를 해결하는 방법을 게시합니다.하지만 어쨌든 당신의 대답에 대해 대단히 감사합니다. –

1

다른 재귀 방법 :

def move_zeros(array): 
    if array: 
     head, tail = array[0], move_zeros(array[1:]) 

     if head is 0: 
      array = tail 
      array.append(head) 
     else: 
      array = [head] 
      array.extend(tail) 

    return array 

합니까를 acw1668의 솔루션보다 많은 목록 작업을하지만 색인 지향이 적습니다.

관련 문제