niithub

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目描述

有一分数序列:2/1、3/2、5/3、8/5、13/8、21/13......。求出这个数列的前N项之和,保留两位小数。

输入描述

N

输出描述

数列前N项和

样例

输入:

10

输出:

16.48 


第一次code:
  使用递归:
  

 1 import java.util.*; 
 2 import java.math.BigDecimal;
 3 
 4 public class jisuanrong 
 5 {  
 6     public static double SimpleAdding(int num) 
 7     { 
 8            if(num==1 || num == 0)
 9            {
10                return 1;
11            }
12            else
13            {
14                return SimpleAdding(num-1)+SimpleAdding(num-2);
15            }
16       } 
17   public static double aa(int num)
18   {
19       if(num == 1)
20       {
21           return 2;
22       }
23       else
24       {
25           return SimpleAdding(num+1)/SimpleAdding(num);
26       }
27   }
28   public static double bb(int num)
29   {
30       if(num == 1)
31       {
32           return 2;
33       }
34       else
35       {
36           return aa(num)+bb(num-1);
37       }
38   }
39   public static void main (String[] args) 
40   {  
41     // keep this function call here     
42     Scanner s = new Scanner(System.in);
43     BigDecimal   b   =   new   BigDecimal(bb(s.nextInt()));  
44     double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
45     System.out.println(f1); 
46   }   
47 }

 

时间效率非常低,当输入数为30时,耗费时间为62毫秒;输入35时,耗费时间为588毫秒;输入40时,耗费时间为5438毫秒。越往后,每增大1,耗费时间增长速率为70%。


==================================

第二次code:

使用了循环:

 1 import java.util.*; 
 2 
 3 public class Main
 4 {  
 5   public static void main (String[] args) 
 6   {     
 7     Scanner s = new Scanner(System.in);
 8     String  str = String.format("%.2f",sum(s.nextInt()));  
 9     System.out.println(str); 
10   }   
11   public static double sum(int num)
12   {
13        double i=2,k=1,n,s=0,m;
14         for(n=1;n<=num;n++)
15         {
16             s+=i/k;
17             m=i;
18             i=i+k;
19             k=m;
20         }
21       return s;
22   }
23 }

时间上耗费比递归要少的很多,但是计算到1474时,可以运算出结果,结果为2385.28,运算到1475时,结果为Infinity,运算到1476,结果是NAN.

 

posted on 2016-08-23 23:24  niithub  阅读(206)  评论(0编辑  收藏  举报