使用给定的k,使用递归找到几何和

时间:2015-06-21 20:05:35

标签: java

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。

5 个答案:

答案 0 :(得分:2)

你做错了几件事:

  • 该方法应返回double而不是int
  • 当你执行1 / a并且你没有显式地将它转换为float / double时,默认结果将是一个int(这是整数操作数之间java中算术运算的默认类型,如果没有明确地转换为其他的)。这意味着它采用结果的整数部分(在这种情况下总是为0,因为1总是小于任何具有a的值)。这意味着结果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 :(得分:1)

那么,你真的想要一个int作为回报值吗?我想你应该要求double。其次,每次执行1/a时,当 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

答案 2 :(得分: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));


    }

答案 3 :(得分:0)

此代码在所有情况下都可以正常工作

double geometricSum(int k) {


    if(k==0)
    return 1;

    int ans=pow(2,k);
    return ((double)1/ans)+geometricSum(k-1);

}

答案 4 :(得分:-1)

public class GeometricSum {

    public static double findGeometricSum(int k) {

        double temp = 0, num = 0;

        if (k == 0) {
            return 1;
        }
        for (int i = 1; i <= k; i++){
            num += (1) / (Math.pow(2, i));
            temp = num;
        }
        return temp + 1;
    }
}