Trouble shootings, RecursionError
'_ctypes' 모듈
- system에
libffi-devel
이 없어서 생기는 문제
해결책 1.
- 현재
pyenv
혹은 사용하는python version
을 체크하고
$ pyenv versions
libffi-dev
패키지 설치
$ sudo apt update && sudo apt install libffi-dev
- 현재 사용하는
python version
환경을 지우고 재 설치
3-1. 본인은pyenv
를 사용하므로 아래의 명령으로 파이썬 지우고 재설치
$ pyenv uninstall <Current Version>
$ pyenv install <Current Version>
재귀 문제
RecursionError
는 재귀와 관련된 에러
- Python이 정한 최대 재귀 깊이는
sys.getrecursionlimit()
을 이용해 확인할 수 있다.
- BOJ 사이트의 채점 서버에서 재귀 허용 값은 1,000 이다.
- 내 시스템
나도 1000이다.
재귀 깊이 측정
RecursionError
는 재귀와 관련된 에러sys.getrecursionlimit()
을 이용해 확인할 수 있다. - BOJ 사이트의 채점 서버에서 재귀 허용 값은 1,000 이다.
나도 1000이다.
print(calc(n))
함수는 n=1000 일 때, 1002 개 스택을 사용한다.
방법 1. 재귀 깊이 변경
import sys
sys.setrecursionlimit(10**6)
- 내 시스템에서 재귀 깊이를 으로 설정하였다.
방법 2. DFS -> BFS
방법 3. DP(재귀) -> DP(반복문)
방법 4. 재귀 횟수 제한
def bomb(head,depth): # 재귀에 depth를 준다.
origin_move=ball_list[head].num
result.append(ball_list[head].origin_idx)
del ball_list[head]
if len(ball_list) == 0:
return 0 # 재귀를 더 할 필요가 없으면 return 0
...중략...
if depth == 500: # depth 가 500이면
return target # 가져갈 정보를 return
return bomb(target,depth+1) # 기본적으로 depth+1을 inherit해준다.
target=bomb(0,1) # return == 0: 끝, return != 0: return target으로 인한 재귀 나가기
# return 값으로 챙길 정보를 챙기고
while True:
if target==0:
break
else:
target=bomb(target,1) # 다시 재귀
Author And Source
이 문제에 관하여(Trouble shootings, RecursionError), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@markyang92/python-Trouble-shootings저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)