피보나치를 계산할 때 fib1
과 fib2
의 두 가지 함수가 있습니다. 이 재귀 제한을 불면 때까지파이썬 2.7 - 재귀 피보나치 폭파
def fib1(n):
if n < 2:
return 1
else:
return fib1(n-1) + fib1(n-2)
def fib2(n):
def fib2h(s, c, n):
if n < 1:
return s
else:
return fib2h(c, s + c, n-1)
return fib2h(1, 1, n)
fib2
잘 작동합니다. 올바르게 이해한다면, 파이썬은 꼬리 재귀를 최적화하지 않습니다. 그건 나에게 잘된다.
fib1
은 매우 작은 값 n
인데도 멈추기 시작합니다. 왜 그런 일이 일어나는거야? 그것이 부진하기 전에 어떻게 재귀 제한에 부딪치지 않는가?
CPU 시간 : 사용자 0.35의, SYS : 0.00의 총 : 0.35의 벽 시간 : 0.35의 ... 그것은 fib1'나를 걸리는 시간 그게 전부 (30)가'.. 이유가 보인다 유익한 –
'fib2 (30)', 실제 : 0m0.032s, 사용자 : 0m0.025s, sys : 0m0.006s for Python 3. 어떤 버전의 Python을 사용하고 있습니까? –
@JoranBeasley 시도 fib1 (100) – JBoyer