这道题 难住我了?? 2/1 3/2 5/3 8/5 13/8 21/13……求前20项的和?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Cal{public static void main(String args[]){ float num1,num2,sum,temp; num1=2; num2=1; sum=0.0; for(int i=1;i<=20;i++) { sum+=num1/num2; temp=num1; num1=num1+num2; num2=temp; } System.out.print("和:="+sum);}} public class text { public static void main(String[] args) { double sum = 0.0000D; for(int i=1;i<=20;i++) { double a=1; a = a+i; sum += a/i; } System.out.print(sum); }}应该是这样,下个数的分子等于上一个数的分子分母相加 public class Test { public static void main(String[] args) { System.out.println(calc(20)); } static double calc(int n) { int[] nums = new int[n + 1]; nums[0] = 1; nums[1] = 2; for (int i = 2; i < n + 1; i++) nums[i] = nums[i - 2] + nums[i - 1]; double sum = 0; for (int i = 0; i < n; i++) { sum += nums[i + 1] * 1.0 / nums[i]; } return sum; }} public class smp{ public static void main(String args[]) { double a=1.0,b=2.0; double total=0; double [] c=new double [5]; for(int i=0;i<5;i++) { c[i]=b/a; double temp; temp=b; b=a+b; a=temp; total+=c[i]; } System.out.println("total="+total); }} 上面我搞错了,弄成前5个了,应该是前20个数,源代码是这样的:public class smp{ public static void main(String args[]) { double a=1.0,b=2.0; double total=0; double [] c=new double [20]; for(int i=0;i<20;i++) { c[i]=b/a; double temp; temp=b; b=a+b; a=temp; total+=c[i]; } System.out.println("total="+total); }} public class Test003 { private static int count=0; private static double sum=0; public double sumAdd(int n){ return this.sumAdd(2, 1, n); } public double sumAdd(double c,double bc,int n){ if(n>=count){ count++; sum+=c/bc; return sumAdd(c+bc,c,n); }else{ return sum; } } public static void main(String[] args){ Test003 test=new Test003(); System.out.println(test.sumAdd(20)); }} public class Test{ public static void main(String []args){ System.out.println(function(20)); } public static double function(int n){ int a1 = 1; int a2 = 2; double sum = 0.0; for(int i=1;i<=n;i++){ sum+=a2/a1; a2=a2+a1; a1=a2-a1; } return sum; }} public class Unb { public static void main(String[] args){ double sum=0.0; double[] a1=new double [20]; double[] a2=new double [20]; a1[0]=2.0;a1[1]=3.0; a2[0]=1.0;a2[1]=a1[0]; for(int i=2;i<20;i++){ a1[i]=a1[i-1]+a1[i-2]; a2[i]=a1[i-1]; } for(int b=0;b<20;b++){ sum=sum+a1[b]/a2[b]; } System.out.println(sum); }}新手解答,不知对不对 public class Run { public static void main(String[] args) throws Exception { System.out.println(sum(1)); } //此方法得到第n个数的值 public static int f(int n){ if(n == 2) return 2; if(n == 1) return 1; return f(n-1) + f(n-2); } //此方法得到前n项和 public static int sum(int n){ if(n == 1) return 1; return sum(n-1) + f(n); }}我不太明白题意,我是这样理解的,第一项是1,每一项等于前两项的和.不知道符不符合题意. /*分子分母都是f(n)=f(n-1)+f(n-2)A1=2,A2=3B1=1,B2=2*/int fun1(int i){if(i==1)return 2;if(i==2)return 3;return fun1(i-1)+fun1(i-2);}int fun2(int i){if(i==1)return 1;if(i==2)return 2;return fun2(i-1)+fun2(i-2);}double sum(){double sum=0.0;for(int i=1; i<=20;i++){sum+=fun1(i)/fun2(i);}return sum;} public class HelloUbuntu { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HelloUbuntu test = new HelloUbuntu(); System.out.println(""+test.sum(20)); //32.66026079864164 } double fun1(int i){ if(i==1)return 2; if(i==2)return 3; return fun1(i-1)+fun1(i-2); } double fun2(int i){ if(i==1)return 1; if(i==2)return 2; return fun2(i-1)+fun2(i-2); } double sum(int n){ double sum=0.0; for(int i=1; i<=n;i++){ sum+=fun1(i)/fun2(i); } return sum; }} 控制位数就把我的方法改一下就行了import java.text.DecimalFormat;public class text {public static void main(String[] args) {double sum = 0.0D;DecimalFormat df = new DecimalFormat( "0.0000 "); //控制位数 for(int i=1;i<=20;i++) { double a=1; a = a+i; sum += a/i; }System.out.print(df.format(sum)); }} public class bishiti { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub bishiti test = new bishiti(); System.out.println(""+test.sum(20)); //32.66026079864164 } double fun1(int i){ if(i==1)return 2; if(i==2)return 3; return fun1(i-1)+fun1(i-2); } double fun2(int i){ if(i==1)return 1; if(i==2)return 2; return fun2(i-1)+fun2(i-2); } double sum(int n){ double sum=0.0; for(int i=1; i<=n;i++){ sum+=fun1(i)/fun2(i); } return sum; } }运行结果为:32.66026079864164public class bishiti { private static int count=0; private static double sum=0; public double sumAdd(int n){ return this.sumAdd(2, 1, n); } public double sumAdd(double c,double bc,int n){ if(n>=count){ count++; sum+=c/bc; return sumAdd(c+bc,c,n); }else{ return sum; } } public static void main(String[] args){ bishiti test=new bishiti(); System.out.println(test.sumAdd(20)); } }运行结果为:34.278294788817234 我之前的代码是有问题的, 这里第一个的程序结果对,第二个的错在进行了21次递归,因为当n=0就开始计算,n=19就完成20次了,不过程序还进行多一次n=20,把count改成1就没问题了 public class Coent { public static void main(String[] args) { float fenzi=2; float fenmu=1; float sum=0; float k=0; for(int i=0;i<20;i++){ sum=sum+fenzi/fenmu; k=fenzi; fenzi=fenmu+fenzi; fenmu=k; } System.out.println("分子"+fenzi); System.out.println("分母"+fenmu); System.out.println("总和"+sum); }} 寻求java反编译代码还原高手诚心请教 java集合问题(多谢高手提供帮助) 学习Java 数据类型强制转换一问 我做练习写的这个程序编译是顺利通过,可是运行是却出现报错信息,大家能帮我看看么?! 求资料,JBUILDER如何开发调试WAP 一个简单的问题 加入JAVA队伍! 请教位运算问题 每次运行时,将针对该用户的数据放在临时表如-temTableA中,用完之后删除数据,安全上有问题吗? 跪求java.media包 关于java不用odbc设置数据源连接access的编程问题
{
float num1,num2,sum,temp;
num1=2;
num2=1;
sum=0.0;
for(int i=1;i<=20;i++)
{
sum+=num1/num2;
temp=num1;
num1=num1+num2;
num2=temp;
}
System.out.print("和:="+sum);}}
public static void main(String[] args) {
double sum = 0.0000D;
for(int i=1;i<=20;i++) {
double a=1;
a = a+i;
sum += a/i;
}
System.out.print(sum);
}
}
应该是这样,下个数的分子等于上一个数的分子分母相加
System.out.println(calc(20));
} static double calc(int n) {
int[] nums = new int[n + 1];
nums[0] = 1;
nums[1] = 2;
for (int i = 2; i < n + 1; i++)
nums[i] = nums[i - 2] + nums[i - 1];
double sum = 0;
for (int i = 0; i < n; i++) {
sum += nums[i + 1] * 1.0 / nums[i];
}
return sum;
}}
{
public static void main(String args[])
{
double a=1.0,b=2.0;
double total=0;
double [] c=new double [5];
for(int i=0;i<5;i++)
{
c[i]=b/a;
double temp;
temp=b;
b=a+b;
a=temp;
total+=c[i];
}
System.out.println("total="+total);
}
}
public class smp
{
public static void main(String args[])
{
double a=1.0,b=2.0;
double total=0;
double [] c=new double [20];
for(int i=0;i<20;i++)
{
c[i]=b/a;
double temp;
temp=b;
b=a+b;
a=temp;
total+=c[i];
}
System.out.println("total="+total);
}
}
private static int count=0;
private static double sum=0;
public double sumAdd(int n){
return this.sumAdd(2, 1, n);
}
public double sumAdd(double c,double bc,int n){
if(n>=count){
count++;
sum+=c/bc;
return sumAdd(c+bc,c,n);
}else{
return sum;
}
}
public static void main(String[] args){
Test003 test=new Test003();
System.out.println(test.sumAdd(20));
}
}
public class Test{
public static void main(String []args){
System.out.println(function(20));
}
public static double function(int n){
int a1 = 1;
int a2 = 2;
double sum = 0.0;
for(int i=1;i<=n;i++){
sum+=a2/a1;
a2=a2+a1;
a1=a2-a1;
}
return sum;
}
}
public static void main(String[] args){
double sum=0.0;
double[] a1=new double [20];
double[] a2=new double [20];
a1[0]=2.0;a1[1]=3.0;
a2[0]=1.0;a2[1]=a1[0];
for(int i=2;i<20;i++){
a1[i]=a1[i-1]+a1[i-2];
a2[i]=a1[i-1];
}
for(int b=0;b<20;b++){
sum=sum+a1[b]/a2[b];
}
System.out.println(sum);
}}
新手解答,不知对不对
public class Run { public static void main(String[] args) throws Exception {
System.out.println(sum(1));
}
//此方法得到第n个数的值
public static int f(int n){
if(n == 2)
return 2;
if(n == 1)
return 1;
return f(n-1) + f(n-2);
}
//此方法得到前n项和
public static int sum(int n){
if(n == 1)
return 1;
return sum(n-1) + f(n);
}
}
我不太明白题意,我是这样理解的,第一项是1,每一项等于前两项的和.不知道符不符合题意.
f(n)=f(n-1)+f(n-2)
A1=2,A2=3
B1=1,B2=2
*/
int fun1(int i){
if(i==1)return 2;
if(i==2)return 3;
return fun1(i-1)+fun1(i-2);
}
int fun2(int i){
if(i==1)return 1;
if(i==2)return 2;
return fun2(i-1)+fun2(i-2);
}
double sum(){
double sum=0.0;
for(int i=1; i<=20;i++){
sum+=fun1(i)/fun2(i);
}
return sum;
}
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloUbuntu test = new HelloUbuntu();
System.out.println(""+test.sum(20));
//32.66026079864164
}
double fun1(int i){
if(i==1)return 2;
if(i==2)return 3;
return fun1(i-1)+fun1(i-2);
}
double fun2(int i){
if(i==1)return 1;
if(i==2)return 2;
return fun2(i-1)+fun2(i-2);
}
double sum(int n){
double sum=0.0;
for(int i=1; i<=n;i++){
sum+=fun1(i)/fun2(i);
}
return sum;
}}
public static void main(String[] args) {
double sum = 0.0D;
DecimalFormat df = new DecimalFormat( "0.0000 "); //控制位数
for(int i=1;i<=20;i++) {
double a=1;
a = a+i;
sum += a/i;
}
System.out.print(df.format(sum));
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
bishiti test = new bishiti();
System.out.println(""+test.sum(20));
//32.66026079864164
}
double fun1(int i){
if(i==1)return 2;
if(i==2)return 3;
return fun1(i-1)+fun1(i-2);
}
double fun2(int i){
if(i==1)return 1;
if(i==2)return 2;
return fun2(i-1)+fun2(i-2);
}
double sum(int n){
double sum=0.0;
for(int i=1; i<=n;i++){
sum+=fun1(i)/fun2(i);
}
return sum;
} }运行结果为:32.66026079864164
public class bishiti {
private static int count=0;
private static double sum=0;
public double sumAdd(int n){
return this.sumAdd(2, 1, n);
}
public double sumAdd(double c,double bc,int n){
if(n>=count){
count++;
sum+=c/bc;
return sumAdd(c+bc,c,n);
}else{
return sum;
}
}
public static void main(String[] args){
bishiti test=new bishiti();
System.out.println(test.sumAdd(20));
}
}运行结果为:34.278294788817234
我之前的代码是有问题的, 这里第一个的程序结果对,第二个的错在进行了21次递归,因为当n=0就开始计算,n=19就完成20次了,不过程序还进行多一次n=20,把count改成1就没问题了
public class Coent { public static void main(String[] args) {
float fenzi=2;
float fenmu=1;
float sum=0;
float k=0;
for(int i=0;i<20;i++){
sum=sum+fenzi/fenmu;
k=fenzi;
fenzi=fenmu+fenzi;
fenmu=k;
}
System.out.println("分子"+fenzi);
System.out.println("分母"+fenmu);
System.out.println("总和"+sum); }}