球拍方案,将1添加到返回值?

时间:2017-11-07 01:35:53

标签: return scheme racket

这是我的计划。

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

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

2 个答案:

答案 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,否则您将除以零。