对递归的简单认识

1.递归简单认识

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

2.递归的里面问题

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

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

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

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

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

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

3.递归里面的运行过程

运行结果:

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

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

递归的缺点:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值