目录

一.定义,递归:

二.解决递归问题的核心:

三.注意事项:

四.递归实例

五:感悟

 

一.定义,递归:

1.方法调用自己

2.必须要有终止条件

 

二.解决递归问题的核心:

1.思考递归形式,从 n -> n-1,很重要,也可以思考从1 ->2

2.递归的终止条件,很重要

做递归只要想清楚这2件事情。

 

三.注意事项:

没有递归终止条件,会导致栈溢出,即StackOverFlowError。

因为递归相当于调用函数,函数里面的参数等信息会存入栈中。

 

四.递归实例

要想做出递归,我们只需要把握好终止条件和n到n-1的递归形式。

 

1.求n的阶乘

public int jiecheng(int n){

  if(n==1) return 1;

  return jiecheng(n-1)*n;

}

在这个例子中,我们来分析递归的核心问题:

①递归终止条件:当n为1的时候,返回1。代码表示为 if(n==1) return 1;

②递归形式:返回递归形式,递归形式为jiecheng(n-1)*n。代码表示为return jiecheng(n-1)*n;

 

2.斐波那契数列

public int fblq(int n){

  int (n==1 || n==2){

    return 1;

  }

  return fblq(n-1) + fblq(n-2);

}

 

3.汉诺塔

public void hannoi(int n,char a,char b,char c){

  if(n==1){

    move(a,c);

    return;

  }

  hanio(n-1,a,c,b);

  move(a,c);

  hanio(n-1,b,a,c);

}

public void move(char a,char c){

  System.out.println(a+"->"+c);

}

分析:汉诺塔,经典的递归模型,仔细思考会觉得很复杂,但是不断重复的移动,使用递归。

①递归终止条件:当n为1的时候,将a柱的盘子移动到c柱,并返回。

②递归形式:只需将a柱上n-1个盘子先移动到b,然后将a柱最下面的盘子移动到c柱,然后再将b柱上n-1个盘子,移动打c柱即可。

 

五:感悟:详细思考递归整个过程会很复杂,但只需分析出递归终止条件和递归形式,便能做出。

 

下篇介绍递归与分形。