1. 程式人生 > >Java求自然對數底e的值

Java求自然對數底e的值

               

編寫一個java程式jse.java,按下面的公式計算自然對數底e的值(n的值取20):e=1+ 1/1!+1/2!+1/3!+1/4!+…1/n!

直接看程式碼吧。2個方法,第一個很好理解,第二個我沒看懂,又是演算法的能量展示。

[java] view plain copy print?
  1. /** 
  2.  * 自然對數的底e的計算。<br> 
  3.  * 1+1/1! + 1/2! + 1/3! + ...<br> 
  4.  *  
  5.  * @author 老紫竹研究室(laozizhu.com) 
  6.  */
  7. publicclass Test {  
  8.   publicstaticvoid main(String args[]) throws
     Exception {  
  9.     // 方法1
  10.     double e = 1.0;  
  11.     double t = 1.0;  
  12.     for (int i = 1; i <= 20; i++) {  
  13.       t /= i;  
  14.       e += t;  
  15.     }  
  16.     System.out.println(e);  
  17.     // 方法2,可惜我沒看懂,很精妙
  18.     e = 0.0;  
  19.     for (int i = 20; i > 0; i--) {  
  20.       e = (e + 1.0) / i;  
  21.     }  
  22.     e++;  
  23.     System.out.println(e);  
  24.   }  
  25. }  
/** * 自然對數的底e的計算。<br> * 1+1/1! + 1/2! + 1/3! + ...<br> *  * @author 老紫竹研究室(laozizhu.com) */public class Test {  public static void main(String args[]) throws Exception {    // 方法1    double e = 1.0;    double t = 1.0;    for (int i = 1; i <= 20; i++) {      t /= i;      e += t;    }    System.out.println(e);    // 方法2,可惜我沒看懂,很精妙    e = 0.0;    for (int i = 20; i > 0; i--) {      e = (e + 1.0) / i;    }    e++;    System.out.println(e);  }}

執行結果

2.71828182845904552.718281828459045

感謝網友提供的第二種方法的解釋,我們來看看

寫成連分式(下面寫前幾項) 1---- + 1 20------------  + 1    19--------------------  + 1        18-------------------------------- + 1              17開啟後正是1/1! + 1/2! + 1/3!+...+1/20!               

一開始是

1/20

然後是

(1/20+1)/19 =  1/20/19 + 1/19

然乎是

(1/20/19 + 1/19)/18 = 1/20/19/18 + 1/19/18 + 1/18

。。。

最後就變成了

1/20/19/18/。。。/1 + 1/19/18/17/.... + 。。。

==》

1/20! + 1/19! + 1/18! .....

果然精妙。

當然,乘法和除法次數和我的第一個演算法一樣,所以效率上並沒有優勢。