2017-11-07 12 views
1

私のプログラムです。Racket Scheme、戻り値に1を加えますか?

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

nはゼロであり、Iは1で結果を返すようにしたいので、黄金比を提示し、それに追加... 1.61 は現在、このプログラムは、約0.61分数などを返します - 私は知りませんどのように1つを追加するには?

答えて

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 
0

ヘルパー機能を持たないソリューションです。黄金比の継続的な割合は、phi = 1 + 1 /(1 + 1 /(1 + 1/..))です。したがって、各ステップであなたにそうあなたは除算を取得します。また、1への最終的な再帰ステップのreturn文を変更する必要が自動的に

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

つを含むx_{n+1} = 1 + 1/x_n(ないx_{n+1} = 1/(1+x_n))として再帰を実装することができますゼロ。

関連する問題