递归算法简析
1.什么是递归算法
递归算法就是直接或间接调用自己的算法
使用递归时,需先找出重复步骤之间的相同逻辑,然后将这些逻辑实现在一个方法中。 递归是在进行一个步骤,进行到某处时,通过调用自身进行分层,在下一层开始紧接着的下一个步骤, 如果下一层不是定义的最后一层,则会在相同的地方再次分层,直到进入最底层,如上例中,max如果 为5,在进行max为5的这一层操作时,将会运行addByMax(4),分层,下一层的max将为4,此时因为定义了max为1时才为最底层,
所以会继续分层,这时max为3,再分,为2,再分,为1,到达最底层,然后 从最底层开始将各层的结果一次向上传递,回归到最顶层,返回最终结果所以递归时要注意形成一层一层的结构,一般会采取某种判断的方法,如if,如果不满足要求 ,那就调用自身进行递归,此时应注意找出上下层之间的联系(各层相同逻辑的部分),让运算进入下一层, 这样形成上一层调用下一层,比如此例中的 max+addByMax(max-1) 最
后注意定义一个最底层,即开始向上回归结果的那一层,最底层将不再调用自身进行递归。
2.递归算法举例
例1:定义一个 sumByMax(int max)方法,求 1+…+max 的和。
public int sumByMax(int max){ if(max>=2){ return max+sumByMax(max-1); }else{ return max; } }
例2:一列数的规则如下: 1、1、2、3、5、8、13、21、34 ,求第30位数是多少?
public class FibonacciSequence { public static void main(String[] args){ System.out.println(Fribonacci(9)); } public static int Fribonacci(int n){ if(n<=2) return 1; else return Fribonacci(n-1)+Fribonacci(n-2); } }
例3:用递归方式实现 99乘法表。
public class MultiTable { public static void main(String args[]) { m(9); } public static void m(int i) { if (i == 1) { System.out.println("1*1=1 "); } else { m(i - 1); for (int j = 1; j <= i; j++) { System.out.print(j + "*" + i + "=" + j * i + " "); } System.out.println(); } } }