试图在计划中理解"让"

Chr*_*egg 2 recursion scheme fibonacci let

我正在尝试扩展一个简单的斐波那契函数,我需要多次使用每个项的值.所以,我想我会let用来保持价值观.但是,我没有得到我认为我应该从功能中得到的东西.

这是原始fib功能:

(define (fib n)
  (if (< n 2)
      n
      (+ (fib (- n 1)) (fib (- n 2)))))
Run Code Online (Sandbox Code Playgroud)

这是我尝试做同样的事情,但是let:

(define (fib-with-let n)
  (if (< n 2)
      0
      (let ((f1 (fib-with-let (- n 1)))
            (f2 (fib-with-let (- n 2))))
        (+ f1 f2))))
Run Code Online (Sandbox Code Playgroud)

结果:

> (fib 10)
55
> (fib-with-let 10)
0
Run Code Online (Sandbox Code Playgroud)

谢谢!

mqp*_*mqp 7

你弄错了:

(if (< n 2)
    0
    ...)
Run Code Online (Sandbox Code Playgroud)

你的意思n.


dav*_*vin 6

您错误输入了基本案例.在第一个版本中你有:

(if (< n 2)
      n
Run Code Online (Sandbox Code Playgroud)

但是在你的后一个版本中你写道:

(if (< n 2)
      0
Run Code Online (Sandbox Code Playgroud)

所以只需0改为n.