이 절차는 반복적 인 프로세스로 피보나치 시리즈를 구현합니다. 이 경우 fib
은 fib-iter
을 호출하는 주 절차이며 반복을 통해 실제 작업을 수행합니다. count
은 우리가 원하는 반복 횟수를 제어하는 데 사용되는 반면, a
및 b
은 각각 n-1
및 n-2
에 대한 피보나치 시리즈의 결과를 저장하는 데 사용됩니다. 줄 (fib-iter (+ a b) a (- count 1))
은 다음 값으로 반복을 진행합니다.
이 책의 반복적 반복 프로세스와 꼬리 재귀에 대해 읽으십시오.이 예제에서는 실제로 발생하는 상황을 이해하기 위해 파악해야하는 개념입니다. 비교를 위해
,의이 같은 절차가 더욱 기존의 구문을 사용하여 (파이썬)를 어떻게 보일지 보자 : 보시다시피
def fib(n):
return fib_iter(1, 0, n)
def fib_iter(a, b, count):
while count != 0: # same as asking `(if (= count 0) ...)`
a, b = a + b, a # same as passing `(+ a b) a` to recursive call
count -= 1 # same as `(- count 1)`
return b # same as returning `b` at end of recursion
는 fib_iter
절차는 간단 count
에 의해 제어 값의 범위 반복된다 변수에서 a
과 b
을 일련의 다음 값에 할당하고 반복 횟수가 완료 될 때까지 반복합니다. 이 시점에서 결과는 b
이고 반환됩니다.
이것은 재귀의 고전적인 예입니다. 재귀를 이해합니까? –
예. 나는이 상황에서 구문에 대해 필요하다고 생각합니다. a + b는 첫 번째 인수, (a + b) + a) 두 번째 인수, 결과 + (count - 1)은 세 번째 인수 여야합니다. 하지만 이것은 잘못된 것 같습니다. – Caleb
@ReutSharabani 실제로는 아니지만, 이것은 피보나치 시리즈의 고전적인 재귀 구현이 아니며, 이것은 _ 구현적인 _ 프로세스 구현입니다. –