2016-09-19 82 views
3

我花了一些時間在這裏和整個互聯網上查看有關此問題,但我無法找到任何對我有意義的事情。 基本上我需要幫助實現計劃中的一個函數,當你給它一個值k時,計算萊布尼茲的公式。您輸入的值可讓函數知道應該計算的系列中有多少個值。這是迄今爲止我所知道的,我不知道我需要編寫這個程序以使其工作。謝謝!萊布尼茨計劃中的公式

(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) 
    (cond ((= k 0) 1) 
     (else 
     (+ (/ (expt -1.0 k) 
       (+ (* 2 k) 1)) 
      (fin-alt-series (- k 1)))))) 

更妙的是,我們可以重寫程序來使用尾遞歸,這將是快是這樣的:

(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))))))) 

例如:

(fin-alt-series 1000000) 
=> 0.7853984133971936 

(/ pi 4) 
=> 0.7853981633974483