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。
答案 0 :(得分:2)
你做错了几件事:
你应该做这样的事情
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;
}
}