递归算法及其常见的运用

    技术2026-03-04  12

    关于递归,百度百科是这样说的:程序调用自身的编程技巧称为递归(recursion)。简单来说就是,方法:“我调用我自己”。其实递归和循环很像,都是重复地去做某件事,循环可以写成递归,但递归不一定能写成循环,因为终止递归的条件需要找到,是一个充分不必要条件。

    递归的条件

    1.递归的终止条件(也就是什么时候达到某一个条件可以结束了); 2.得到递归的表达式。 下面举几个例子。

    使用递归做求和运算

    有一个经典题目,1+2+3+...+100的和是多少,记得小学的时候学到高斯用了巧妙地方法惊呆了他的数学老师,我还感叹为什么我没有想到,而是一个一个去加。当然了,交给计算机去做的时候,就可以一个一个去加,使用for循环,一个一个加,加到100,时间复杂度为O(n),代码如下:

    int sum = 0; for (int i = 0; i <= 100; i++) { sum = sum + i; } System.out.println(sum);

    看起来很简单,但是如果换一种思路,使用递归,来看一下。 所谓的这种1+2+3+...+100,可以看作是1+2+3+...+n,这个n可以等于任何大于1的数,而这个1+2+3+...+n就成为了递归的表达式,终止条件可以是任意表达式的n与值。比如说n=1的时候,表达式的值为1,n=2时,表达式的值为3,这都是递归的终止条件,废话不多说,上代码:

    public static int sum(int n) { //在这里,如果我随便换一个n,返回一个表达式的结果,仍然可以达到同样的目的 //这就是递归的终止条件 if (n == 1) { return 1; } else { return sum(n - 1) + n; } } public static void main(String[] args) { System.out.println(sum(100)); }

    看起来舒服多了,循环的时候要想到开始和结尾,并且循环体内要进行一定的运算。在递归中,只要遵循递归的两个条件,表达式和终止条件,即可。

    Processed: 0.016, SQL: 9