一、递归的定义
一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等.
简单的来说,程序反复调用自身即是递归.
二、递归的使用
递归是如何运作的?在这里我们用一张图片来展示一下.
这是一个A函数递归调用自身的过程,因为递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可.千万不要去纠结每一级调用和返回的细节!
写递归的时候我们一定要注意三点:
- 找整个递归的终止条件:递归应该在什么时候结束?
- 找返回值:应该给上一级返回什么信息?
- 本级递归应该做什么:在这一级递归中,应该完成什么任务?
三、递归的例题
首先、给出一个简单的例子,从 1 加到 100 的和,我们都已经很熟悉结果是5050了,拿到这个题,都很容易想到用循环来做,在这里就不写循环方法的代码了,直接进入正题——递归求解
//1到100的和
public class Recursion {
public static void main(String[] args) {
System.out.println(f(100));
}
public static int f(int n){ //函数f 就是计算1到100的和
if(n==1){ //判断特殊情况
return 1;
}
return f(n-1)+n;
}
}
第二个例子就是用递归的方法求 n 的阶乘
递归阶乘n! = n * (n-1) * (n-2) * …* 1(n>0)
public static Integer recursionMulity(Integer n){
if(n==1){
return 1;
}
return n*recursionMulity(n-1);
}
当然这样的典型例子还有很多,在这里就不写了,递归最重要的就是理解其解题的思想,再加上自己去多做题多练习,慢慢就能找到它的规律所在了.