2015-06-21 53 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)); 


    }