Процедура реализует ряд Фибоначчи как процесс итеративный. В этом случае fib
является основной процедурой, которая вызывает fib-iter
, что делает фактическую работу с помощью итерации. Обратите внимание, что count
используется для управления количеством желаемых итераций, тогда как a
и b
используются для хранения результатов серии Фибоначчи для n-1
и n-2
соответственно. Строка (fib-iter (+ a b) a (- count 1))
продвигает итерацию к следующим значениям.
Пожалуйста, найдите время, чтобы прочитать об итеративных или рекурсивных процессах в книге, а также прочитать о рекурсии хвоста - вот те понятия, которые вам нужно понять, чтобы действительно понять, что происходит в этом примере.
Для сравнения, давайте посмотрим, как одни и те же процедуры, будет выглядеть с использованием более обычного синтаксиса (в Python):
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 на самом деле нет, это не классическая рекурсивная реализация серии Фибоначчи, это реализация процесса _iterative_. –