递归:
A方法调用B方法,我们很容易理解!
递归就是:A方法调用A方法!就是自己调用自己;
能不用递归就不用递归;(如果用:前提是基数比较小)
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为 一个与原问题相似的规则较小的问题来求解;递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合;
递归结构包括2个部分:
递归头:什么时候不调用自身方法;如果没有头,将陷入死循环;
递归体:什么时候需要调用自身方法;
代码案例1:栈溢出异常;重点
public class Demo06 { public static void main(String[] args) { //java.lang.StackOverflowError:栈溢出异常 Demo06 demo06= new Demo06(); demo06.test(); } public void test(){ test();//没有递归头,程序停止不了,所以死循环了//递归头的作用:就是什么时候不调用自身方法了 } }
代码案例2:阶乘:重点理解递归
public class Demo07 { public static void main(String[] args) { //阶乘: /** * 阶乘定义: * n!=1*2*3*4...*(n-1)*n * * 2!=2*1 * 3!=3*2*1 * 4!=4*3*2*1 * 5!=5*4*3*2*1 */ int sum=f(3); System.out.println(sum); } //方法 5!=5*4*3*2*1 /** * 1:1 * 2:2* f(1) * 3:3* f(2) * f(1) * 4:4* f(3) * f(2) * f(1) n:n*f(n-1) * @param n * @return */ public static int f(int n){ if(n==1){//1!是本身 //调用到最后 return 1; }else{ return n*f(n-1); } } } /* 笔记:递归三个阶段 1,边界条件:边界(f(1)) 2,前阶段:f(n-1) 3,返回阶段:结果 Java都是栈机制的 */
笔记:
面试高频点,笔试高频点;
递归学习:是一种思想的学习;