我一直在尝试理解Scheme中的尾递归,并且很难理解使用尾递归计算斐波那契数列的go to示例中正在发生什么......
如果这是斐波那契数列的尾递归或迭代版本的代码:
(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)
thanks!
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
放入框架的三个插槽中,并(重新)启动其执行。 - Will Ness