这是我的程序。
(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,否则您将得到除以零。