playXP

서브 메뉴

Page. 1 / 12502 [내 메뉴에 추가]
글쓰기
작성자 아이콘 marine12
작성일 2020-04-07 21:46:00 KST 조회 545
제목
RecursionError: maximum recursion depth exceeded in comparison 오류 재귀함수 터진 건가요?

def find_median_five(L):

L.sort()

return L[len(L)//2]

 

def MoM(L, k): # L의 값 중에서 k번째로 작은 수 리턴

if len(L) == 1: # no more recursion

return L[0]

i = 0

A, B, M, medians = [], [], [], []

while i < len(L) and i+4 >= len(L):

medians.append(find_median_five(L))

i+=5

if i < len(L) and i+4 >= len(L):

median.append(find_median_five(L))

mom = MoM(medians, len(medians)//2)

for v in L:

if v < mom: A.append(v)

elif v > mom: B.append(v)

else: M.append(v)

 

if len(A)>=k: return MoM(A,k)

elif len(A)+len(M)<k: return MoM(B,k-len(A)-len(M))

else: return mom

 

n, k = (int(x)for x in input().split())# n과 k를 입력의 첫 줄에서 읽어들인다

L = [int(x) for x in input().split()]# n개의 정수를 읽어들인다. (split 이용 + int로 변환)

print(MoM(L, k))​ 

이 코드에서 지금 

> 10 3

-62 1 82 55 -48 63 47 -63 93 92 

Makefile:6: recipe for target 'py3_run' failed

make: *** [py3_run] Error 1

Traceback (most recent call last):

  File "Main.out", line 27, in <module>

    print(MoM(L, k))

  File "Main.out", line 15, in MoM

    mom = MoM(medians, len(medians)//2)

  File "Main.out", line 15, in MoM

    mom = MoM(medians, len(medians)//2)

  File "Main.out", line 15, in MoM

    mom = MoM(medians, len(medians)//2)

  [Previous line repeated 995 more times]

  File "Main.out", line 6, in MoM

    if len(L) == 1: # no more recursion

RecursionError: maximum recursion depth exceeded in comparison

오류가 이렇게 뜨는데 재귀함수쪽을 살펴 봐야겠죠?

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
아이콘 CF_Crusader (2020-04-07 22:08:08 KST)
0↑ ↓0
센스 이미지
재귀가 지금 탈출을 못하는거 같네요
아이콘 CF_Crusader (2020-04-07 22:43:11 KST)
0↑ ↓0
센스 이미지
근데 while문이랑 if문에 4랑 5는 무슨 의미인가요?
애초에 저기 들어갈 일이 있는지 모르겠네요
아이콘 CF_Crusader (2020-04-07 23:10:27 KST)
0↑ ↓0
센스 이미지
여하튼 저 소스만으로 나오는 결론은
1. medians에 append가 하나도 되지 않는다.
2. 그렇기 때문에 mom = MoM(medians, len(medians)//2) 에서는 빈 리스트가 들어간다
3. 빈 리스트의 length는 0이기 때문에 MoM의 맨 첫번째 탈출 조건문으로 탈출되지 않는다
4. 무한반복
일듯
아이콘 marine12 (2020-04-07 23:24:04 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
ㄴ ㄳㄳ 고쳐볼게용
아이콘 marine12 (2020-04-07 23:25:26 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
ㄴㄴ4랑 5가 있는 건 def find_median_five함수(아직 완성x)가 5단위로 median값 찾고 그걸 이용해서 횟수 줄이는 연습하고 있어서 그래요.
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.