递归就像爬楼梯一样,每一层的阶梯看似重复,但最终却能到达楼顶。
它是不断调用自己的方法,将大问题化为小问题的编程技巧。
- /**
- * 计算5的阶乘(result = 5*4*3*2*1)
- *
- */
- public class Test01 {
- public static void main(String[] args) {
- System.out.println(f(5));
- }
-
- public static int f(int n) {
- if (1 == n)
- return 1;
- else
- return n*(n-1);
- }
- }
复制代码
这面这题就是不断通过调用f()这个方法,最终达到计算5的阶乘的目的。
上面这题比较简单,再看一题:
Q:求2/1+3/2+5/3+8/5...前20项
这题通过找规律,可以知道“前一个数的分子,是后一个数的分母”,
“前一个数的分子、分母的和,是后一个数的分子” ,“前20项”就是题目设定的递归范围。
就是这样通过找规律,找出递归条件,写出那个方法:
- public class TestSum {
- public static void main(String args[]) {
- System.out.println(getSum(2,1,20));
- }
- public static double getSum(double molecular ,double denominator,int limit){
-
- if(limit ==1){
- return molecular/denominator;
- }else{
- double sum = molecular/denominator;
- double tmp1 = molecular;
- double tmp2 = molecular+denominator;
- limit--;
- return sum += getSum(tmp2,tmp1,limit);
- }
- }
- }
复制代码 |