2015-06-21 59 views
0
import java.util.Scanner; 


public class GeometricSumFromK { 


    public static int geometricSum(int k,int a) 
    { 

     if(k == 0) 

      return 1; 

     a = a*2; 
     return 1/a + geometricSum(k-1, a); 

    } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner s = new Scanner(System.in); 
     System.out.println("enter k"); 
     int k = s.nextInt(); 
     int a = 1; 
     System.out.println(geometricSum(k,a)); 


    } 

} 

如何用給定的k找到幾何和例如1 + 1/2 + 1/4 + 1/8 + ... + 1 /(2^k)使用遞歸 現在,它爲每個k值顯示1。對於給定的k,使用遞歸找到幾何和

回答

2

你做幾件事情錯:

  • 的方法應該返回雙重不是int
  • 當你做1 /和你不明確投它漂浮/雙默認的結果將是一個int(這是在整數操作數之間的java中的算術運算的默認類型,如果不是明確地轉換成別的)。這意味着它需要結果的整數部分(在這種情況下,它始終爲0,因爲1總是小於任何值)。這意味着結果1是因爲案件的,當你明確地返回1.

你應該做這樣的事情

public static float geometricSum(int k,int a) 
{ 

    if(k == 0) 

     return 1; 

    a = a*2; 
    return ((float)1/a) + geometricSum(k-1, a); 

} 
1

好了,你真的想要一個int作爲返回值?我想你應該要求double。其次,每次你執行1/a,當一個int,值被捨去,例如1/2是不是0.5,而是0。這就是爲什麼你最終與1

結束這應該工作:

public static double geometricSum(int k,int a) 
{ 

    if(k == 0) 

     return 1; 

    a = a*2; 
    return (double)1/a + geometricSum(k-1, a); 

} 

這部分:(double)1/a確保結果是double

+1

你也可以只做到'1.0/A'。 – yshavit

+0

我試圖做到這一點使用雙但仍然是答案是相同的 –

+0

我將1/a + geometricSum(k-1,a)的值存儲在變量double p中,然後我返回p ,但仍然是我的答案是一樣的。 –

0

試試這個:

public static float geometricSum(float k,float a) 
    { 

     if(k == 0) 

      return 1; 

     a = a*2; 
     return 1/a + geometricSum(k-1, a); 

    } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner s = new Scanner(System.in); 
     System.out.println("enter k"); 
     float k = s.nextFloat(); 
     float a = 1; 
     System.out.println(geometricSum(k,a)); 


    }