public class DG{ static double f; void f(double m ,double n,int i){ System.out.println(m/n); f += m/n; System.out.println(f); if(i == 20){ return; //返回值类型为void的话,return表示跳出此方法。 } i++; f(m+n,m,i); return; } public static void main(String[] args){ DG d = new DG(); d.f(2,1,1); } }
public class Test { static double sum = 0; public static void main(String[] args) { sum(20, 2, 1); System.out.println(sum); } static void sum(int count, double a, double b) { if (count == 1) { sum = a / b; } else { sum(--count, a + b, a); sum += a / b; } } }没有注释,我相信各位高手可以轻易看懂!
import java.util.*;
import java.math.*;
//
//递归20次 第一次2/1 第二次的分母就是上一次的分子 第二次的分子就是上一次的分子和分母的和
public class Test
{
static double fenzi=2.0000;
static double fenmu=1.00000;
static double sum=0.0000;
static int i=1;//用来控制递归次数
double linshi;//创建一个临时变量用于存储这次分母,以便求取下次分子值
double Test1()
{
sum=sum+fenzi/fenmu;
System.out.println("fenzi:"+fenzi);
System.out.println("fenmu:"+fenmu);
System.out.println("sum:"+sum);
System.out.println("times:"+i);
linshi=fenmu;
fenmu=fenzi;
fenzi=fenzi+linshi;
while(i!=20){
i++;
sum=Test1();
}
return sum;
}
public static void main(String args[])
{
Test t=new Test();
t.Test1();
System.out.println("最后的和是:"+sum);
}
}
纠结了一阵子 应该是递归了吧 (当时递归没学好 不知道理解对了没)
static float sum = 0;
static int count = 0;
/**
* @param args
*/
public static void main(String[] args) {
sum(2f,1f);
System.out.println(sum);
}
public static void sum(float x,float y){
count++;
float temp = 0;
sum += x/y;
temp = x;
x = x + y;
y = temp;
if(count == 20){
return;
}
sum(x,y);
}
}
public static void main(String[] args) {
System.out.println(getSum(20, 1, 2));
} /**
* 数列求和
*
* @param count
* 数列项数
* @param denominator
* 首项分母
* @param numerator
* 首项分子
* @return
*/
static double getSum(int count, int denominator, int numerator) {
if (denominator > numerator) {
denominator += numerator;
numerator = denominator - numerator;
denominator -= numerator;
} if (count > 1)
return ((double) numerator / denominator + getSum(count - 1,
numerator, numerator + denominator));
else if (count == 1)
return ((double) numerator / denominator);
else if (count == 0)
return (0);
else
throw new IllegalArgumentException();
}
public static void main(String[] args)
{
RecursionTest rTest = new RecursionTest();
double d = rTest.doSum(2, 1, 3);
System.out.println(d);
} public double doSum(double numerator, double denominator, int count)
{
if(count < 1) // input error
return -1d;
else if(count == 1 )// end condition
{
System.out.println("count="+count+"\t" + "return = "+ numerator/denominator);
return numerator/denominator;
}else { // call myself with next state params
System.out.println("count="+count+"\t" + "return = "+ numerator/denominator + " + " + "doSum(" + Double.valueOf(numerator+denominator).intValue() + ", "+Double.valueOf(numerator).intValue()+", "+ (count-1)+")");
return numerator/denominator + doSum(numerator+denominator, numerator, count-1);
}
}output:
count=3 return = 2.0 + doSum(3, 2, 2)
count=2 return = 1.5 + doSum(5, 3, 1)
count=1 return = 1.6666666666666667
5.166666666666667
static double f;
void f(double m ,double n,int i){
System.out.println(m/n);
f += m/n;
System.out.println(f);
if(i == 20){
return; //返回值类型为void的话,return表示跳出此方法。
}
i++;
f(m+n,m,i);
return;
} public static void main(String[] args){
DG d = new DG();
d.f(2,1,1);
}
}
public class Test {
static double sum = 0; public static void main(String[] args) {
sum(20, 2, 1);
System.out.println(sum);
} static void sum(int count, double a, double b) {
if (count == 1) {
sum = a / b;
} else {
sum(--count, a + b, a);
sum += a / b;
}
}
}没有注释,我相信各位高手可以轻易看懂!