递归算法简析

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();
    }
  } 
}
 

  

 
 
 
posted @ 2018-03-01 09:33  天空VS  Views(305)  Comments(0)    收藏  举报