이 꼬리 재귀 기능이 있습니다.
def recursive_function(n, sum):
if n < 1:
return sum
else:
return recursive_function(n-1, sum+n)
c = 998
print(recursive_function(c, 0))
그것은 작동합니다 n=997
, 그리고 그것은 그냥 깨고 밖으로 뱉어 RecursionError: maximum recursion depth exceeded in comparison
. 이것이 스택 오버플로입니까? 그것을 해결할 방법이 있습니까?
line <n>, in <module>
스택 추적)을 추가 하고이 코드는 2 개의 스택 프레임을 취합니다 n=1
(기본 사례는 n < 1
이므로 n=1
여전히 재귀합니다). 그리고 재귀 제한은 "1000을 눌렀을 때의 오류"가 아니라 "1000 (1001)을 초과하면 오류"가 아니기 때문에 포괄적 인 것이 아니라고 생각합니다. 997 + 2
1000 미만이므로 998 + 2
한계에 도달하기 때문에 작동 하지 않습니다.
recursive_function(997)
작동합니다 998
. 호출 recursive_function(998)
할 때 999 스택 프레임을 사용하고 인터프리터가 1 프레임을 추가합니다 (코드가 항상 최상위 모듈의 일부 인 것처럼 실행되기 때문에) .1000 제한에 도달합니다.