我一直在試圖理解Scheme中的尾遞歸,並且我很難理解正在發生的事情,例如使用尾遞歸進行Fibonacci ...計劃中斐波那契尾遞歸的解釋?
如果這是尾遞歸的代碼,或者迭代斐波那契:
(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);定義函數FIB和變量n」 沒有那麼 - 這*定義了函數'fib',它接受一個名爲'n' *的參數。同樣,'(define(fib-iter ...)定義了函數'fib-iter',它需要3個參數,第一個名爲'a',2nd爲了顯示tail-recursion是如何工作的,在形式'(fib-iter ab count)'的上面和下面畫兩條水平線,你得到的是一個* frame * - 一個名字然後每次調用'(fib-iter xyz)'只是將三個值'xyz'放入三個插槽(在這種情況下)框架,並(重新)開始執行。 – 2014-09-29 09:41:53