大家好,今天我们来学习一下java中的递归,相信大家应该也对递归有一点了解吧,如果没有也没有关系,我们现在就来了解一下。
五、递归
自身中包含了自己,遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决后,原问题就迎刃而解了.
1、递归的概念.
一个方法在执行过程中调用自身,就称为"递归"
递归相当于数学上的"数学归纳法",有一个起始条件后有一个递推公式.→数学思维.
例如求N!
起始条件:N=1时,N!为1,这个起始条件相当于递归的结束条件.
递归公式:求N!直接不好求,可以把问题转换成N!=N*(N-1)!
递归的必要条件
1、将原问题划分为其子问题,注意:子问题必须要与原问题的解法相同,
递归出口.
栈溢出错误
注:StackOverflowError栈被放满了(递归没有终止条件或者终止条件给错)
递归中是没有循环的.
1.每次递归的时候,这个方法只执行一部分,就去执行一部分了
2.归的时候,会把方法剩余部分执行完毕.
3.递的次数和归的次数是一样的.
→function (1) 归的时候先走完的谁是第1
递的时候是先三再二后一
归的时候就变成了先一再二后三
关于"调用栈"
方法调用的时候,会有一个"栈"这样的内存空间描述当前的调用关系,称为调用栈.
每一次的方法调用就称为一个"栈桢",每个"栈帧"中包了这次调用的数是哪些,返回到哪里继续执行等信息.
那么今天分享就到这里,谢谢大家!!!