2016-09-19 7 views
3

私はこれについての質問をインターネットやインターネットで見ていましたが、私には意味をなさないものは実際には見つかりません。 基本的に私はLeibnizの数式を評価するSchemeの関数を実現する上で助けが必要です。入力した値によって、シリーズ内で計算する必要のある値の数が関数にわかります。これは私がこれまで行ってきたことですが、私はそれを動作させるためにこのプログラムを書く必要があるかどうか分かりません。ありがとう!Leibniz式のスキーム

(define (fin-alt-series k) 
    (cond ((= k 1)4) 
     ((> k 1)(+ (/ (expt -1 k) (+(* 2.0 k) 1.0)) (fin-alt-series (- k 1.0)))))) 

答えて

3

基本ケースが正しくありません。我々はクリーンアップできるコードビットと:たとえば

(define (fin-alt-series k) 
    (let loop ((k k) (sum 0)) 
    (if (< k 0) 
     sum 
     (loop (- k 1) 
       (+ sum (/ (expt -1.0 k) (+ (* 2 k) 1))))))) 

(define (fin-alt-series k) 
    (cond ((= k 0) 1) 
     (else 
     (+ (/ (expt -1.0 k) 
       (+ (* 2 k) 1)) 
      (fin-alt-series (- k 1)))))) 

をさらに良いことに、我々は末尾再帰を使用する手順を書き換えることができ、それはより速く、このようになるだろう

(fin-alt-series 1000000) 
=> 0.7853984133971936 

(/ pi 4) 
=> 0.7853981633974483