2019-11-25 · 递归方法的使用以及例题

一,递归方法:

就是在一个方法体内,调用了它自己本身的方法。

二,说明:

方法递归包含了一种隐式循环,它会循环执行某段代码,而且不需要循环控制。

三,注意:

递归方法一定要向已知的方向递归,否则会变成无穷递归,类似于死循环,最后导致栈溢出 boom~

四,写一些例题:

练习多多


练习7.1:请用Java写出递归求阶乘(n!)的算法
/*
 *  说明:
 *      求阶乘,就是求 1-n 之和。
 * 
 *  求阶乘公式:f(n) = f(n-1) + f(n-2) +...+ 1;
 */
public class Test1 {
    public static void main(String[] args) {
        
        Test1 test = new Test1();
        int sum = test.getSum(5);
        
        System.out.println(sum);
    }
    
    //求阶乘公式:f(n) = f(n-1) + f(n-2) +...+ 1;
    public int getSum(int n) {
        if(n == 1) {
            return 1;
        }else {
            /*
             * 递归方法一定要向已知的方向递归,
             * 否则会变成无穷递归
             */
            return n + getSum(n-1);
        }
    }
}


练习7.2:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。
/*
 * 练习7.2:已知有一个数列:f(0) = 1,f(1) = 4,
 *  f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。
 * 
 * 由题意得:
 *  公式:f(n+2)=2*f(n+1) + f(n)
 */
public class Test2 {
    public static void main(String[] args) {
        Test2 test = new Test2();
        
        System.out.println(test.f(10));
    
    }
    
    public int f(int n) {
        //首先把一些明确的写出来
        if(n == 0) {
            return 1;
        }else if(n == 1) {
            return 4;
        }else {
            //要求的是 f(10) = 2*f(9) + f(8)
            return 2*f(n-1) + f(n-2);
        }
    }
}


练习7.4:输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值

例如:1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和
要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来

/*
 * 练习7.4:输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值
1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和
要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来

公式:f(n) = f(n-1) + f(n-2);

 */
public class Test4 {
    public static void main(String[] args) {
        
        Test4 test = new Test4();
        
        System.out.println(test.f(10));
        
    }
    
    public int f(int n) {
        //当 n=1 或者 n=2 时,它们不能和前面两个数相加,所以直接输出 1
        if((n == 1)||(n == 2)) {
            return 1;
            //根据公式,一个数等于前两个数之和
        }else {
            return f(n-1) + f(n-2);
        }
    }
}


五,Java中还有一些常见的例题:

  1. 快速排序:快速排序也是采用了递归方法的方式来排序。这样会让程序来排序数组很快。这里不详讲(其实是不会...)...
  2. 汉诺塔问题:这个游戏也涉及到了递归方法,其原理和递归方法很像。这里不详讲(其实是不会...)...
  3. 等等等...

你可能感兴趣的:(2019-11-25 · 递归方法的使用以及例题)