对递归的简单认识

1.递归简单认识

递归解决问题就是把大问题变成小问题。函数之间的循环调用。

2.递归的里面问题

方法自己调用自己,最重要可能是递归的结束调节,因为每一个方法的执行都会产生一个栈,然而栈是有大小的,如果无限递归就会产生stackOverofMemeory(栈溢出),并且每一个方法都有自己的私有变量。而且每一次的方法调用都会产生一个栈帧,也会随着方法的结束而销毁。

栈帧的基本概念:本地变量表,操作数栈,动态链接,方法返回地址

本地变量表:是一个数组类型,主要储存基本变量(byte,boolean等),引用地址,方法返回值,那么数组里面的一个变量占用4个字节,然而long,double类型呢,当然占用8个字节。

操作数栈:是一个后进先出栈结构,主要是进行算数运算和方法里面的参数传值。

动态链接:栈帧指向常量池的引用。

方法返回地址:方法的返回值有两种情况,一种是异常情况,方法没有返回值,不会处理异常,另一种是正常情况,返回给调用者正常值。

3.递归里面的运行过程

对递归的简单认识

对递归的简单认识

运行结果:

对递归的简单认识

分析:我们可以看出求阶乘是递归里面比较简单的例子,但是下面的快速排序法里面使用递归算法,如果我们在不看运行结果,写出里面的运行结果,说明我们对递归有了自己的认识。

这里面我们至于要把握住两点,一个是递归的结束条件。每一个方法都有自己的私有变量。

递归的缺点:

1.递归的调用就是函数自己调用,当它自己调用自己时,会在栈中重新分配空间,还有需要入栈和出栈有需要花费时间

2.递归如果大于栈的分配的内存空间,会产生栈溢出的危险。

3.方便了程序员,难为了机器。可能二叉树的前中后序用递归很容易实现,但是不用递归许多人估计很虚。