1
예를 들어, 교과서의 코드
- 재귀를 사용하여 피보나치 문제를 해결 -이 같다 :약 미리 경계 상황을 감지하여 재귀 시간을 단축하는 방법
cache = {}
def fibo(n):
if n in cache :
return cache[n]
elif n <=2:
cache[n] = 1
else:
cache[n] = fibo(n-1) + fibo(n-2)
return cache[n]
그러나, 나는 때마다 일을 걱정 함수 호출, 비용이 필요합니다. 왜 교과서는 불필요한 함수 호출을 피하기 위해, 대신에이 코드를 사용하지 않은 :
이런 식으로cache = {}
def fibo(n):
if n <=2:
cache[n] = 1
else:
# to avoid unnecessary function call
if n-1 in cache:
f1 = cache[n-1]
else:
f1 = fibo(n-1)
if n-2 in cache:
f2 = cache[n-2]
else:
f2 = fibo(n-2)
cache[n] = f1 + f2
return cache[n]
, 우리는 실제로 그것을 호출하기 전에 불필요한 함수 호출을 피할 수 있습니다.
어쨌든 제 질문은, 교과서의 저자가 두 번째 방법으로 코드를 작성하지 않는 이유는 무엇입니까?
당신은'f1'과'f2'를 사용하지 않는다는 것을 알고 있습니다. 그래서 불필요한 함수 호출을하고있는 것입니다, 맞습니까? – murgatroid99
일반적으로 그들은 단일 개념, 보통 재귀를 보여 주려고합니다. 재귀 함수를 최적화하는 것은 나중에 발생할 수 있습니다. – ernie
코드 샘플은 (조기) 미세 최적화보다 가독성이 높아야하기 때문입니다. 이것이 글로벌 조회를 로컬 변수로 대체하지 않은 동일한 이유입니다. – Antimony