Я пытался понять хвостовую рекурсию в схеме, и мне трудно понять, что происходит в примере перехода с использованием хвостовой рекурсии для Фибоначчи...
если это код для хвостовой рекурсии или итеративного Фибоначчи:
(define (fib n)
(fib-iter 1 0 n))
(define (fib-iter a b count)
(if (= count 0)
b
(fib-iter (+ a b) a (- count 1))))
По сути, я могу понять, что происходит в каждой строке, кроме этой:
(fib-iter 1 0 n))
что на самом деле происходит в этой строке? Нигде не могу найти объяснение. Я новичок в Scheme, и синтаксис пока довольно запутан.
Или кто-нибудь может объяснить, что происходит в каждой строке? это мое основное понимание, но я не уверен, правильно ли я:
(define (fib n) ;;define the function fib and variable n
(fib-iter 1 0 n)) ;;?? no idea
(define (fib-iter a b count) ;;define function fib-iter, variables a, b and count
(if (= count 0) ;;if the count is equal to 0,
b ;;return b
(fib-iter (+ a b) a (- count 1)))) ;;recursively calling function fib-iter with 3 parameters (a+b), a and (count - 1)
Благодарность!
fib
, которая принимает один параметр с именемn
. Аналогично,(define (fib-iter ...
определяет функциюfib-iter
, которая принимает 3 параметра, 1 –a
, 2 –b
и 3 –count
. Чтобы наглядно представить, как работает хвостовая рекурсия, нарисуйте две горизонтальные линии над и под формой(fib-iter a b count)
. У вас получится фрейм – именованный блок с три слота (в данном случае).Затем каждый вызов(fib-iter x y z)
просто помещает три значенияx y z
в три слота кадра и (повторно) начинает свое выполнение. - person Will Ness   schedule 29.09.2014