这是我的计划。
(define (golden n)
(cond
[(equal? n 0) 0]
[else (/ (+ 1 (golden (- n 1)))) ]
))
当n为零时,我想返回添加1的结果,从而呈现黄金比例...... 1.61 目前这个程序返回大约0.61作为分数 - 我不知道如何添加一个?
答案 0 :(得分:1)
您的近似值将计算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
答案 1 :(得分:0)
具有辅助功能的解决方案。黄金比率的连续分数是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,否则您将除以零。