2017-11-07 10 views
1

여기 내 프로그램이 있습니다. n이 0이면 1 따라서 황금 비율을 제시하고, 여기에 추가로Racket Scheme, 반환 값에 1을 더합니까?

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

, 나는 결과를 반환 할 ... 1.61 현재이 프로그램은 분수로 약 0.61 반환 - 나도 몰라 어떻게 추가하나요?

답변

1

귀하의 근사치는 golden ratio - 1입니다. 그렇다면 이후에 누락 된 문자를 1에 추가하지 않으시겠습니까? 또한, 값을 결과를 10 진수로 변환하는 데 유용 할 수 있습니다 그냥 그 일을 위해 도우미를 쓰자 (일부 통역처럼, 대신 분수에 결과를 반환하는.) 그것은 기대 작품으로

(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))과 재귀를 구현할 수 있습니다 제로.