球拍方案,将返回值加 1



这是我的程序。

(define (golden n)
  (cond
  [(equal? n 0) 0]
  [else   (/  (+ 1 (golden (- n 1)))) ]
))

当 n 为零时,我想返回加 1 的结果,从而呈现黄金比例......1.61目前这个程序返回大约 0.61 作为分数 - 我不知道如何添加?

您的近似值将计算golden ratio - 1 。那么为什么不在返回添加丢失的1呢?此外,将结果转换为十进制值可能很有用(而不是像某些解释器那样以分数返回结果)。让我们编写一个帮助程序来执行此操作:

(define (golden n)
  (+ 1
     (exact->inexact
      (golden-helper n))))
(define (golden-helper n)
  (cond
    [(equal? n 0) 0]
    [else (/ 1 (+ 1 (golden-helper (- n 1))))]))

它按预期工作:

(golden 1000)
=> 1.618033988749895

没有帮助程序函数的解决方案。黄金比例的连续分数是 phi = 1 + 1/(1+ 1/(1 + 1/.. ))。因此,在每个步骤中,您都可以将递归实现为x_{n+1} = 1 + 1/x_n(而不是x_{n+1} = 1/(1+x_n)),其中包括自动递归

(define (golden n)
  (cond
  [(equal? n 0) 1]
  [else   (+ 1 (/  1 (golden (- n 1)))) ]
 ))

您还需要将最终递归步骤的 return 语句更改为 1,否则您将得到除以零。

最新更新