递归之初体验

递归,什么是递归?

先来看一下,百度百科给出的解释:

 

由上可以看出,递归即方法调用自身,来解决某类比较复杂但是却需要多次有着相同计算手段的重复性工作。(如求数的阶乘,但是这个数又不能过大,过大会产生栈溢出的错误。)

 阶乘:5!=5*4*3*2*1;

   4!=4*3*2*1;

     ...

下图解释了递归的执行过程,以及解释了产生栈溢出的原因。

递归执行过程:方法在Main函数中被调用执行,然后开始逐一向后递归调用,直到找到了一个固定值,即f(1)=1时,再按“原路返回”,将f(1)的数值回传,进而计算得到f(2),f(3)...f(n)的值,进而进行运算操作。

栈溢出的原因:Java内存机制分为占内存和堆内存。栈内存在调用方法时,Main函数最先被调用,即处在栈底位置,当递归执行时,同一个函数被多次调用,堆积在栈内存当中,占用大量内存。当递归次数过大,与计算机可用内存发生冲突时,就会产生栈溢出(Exception in thread "main" java.lang.StackOverflowError)的错误。

 

 总结:递归即方法自身调用自己,大化小,繁化简的操作。使用条件是递归次数基数不大,否则会产生栈溢出的错误。

 

posted @ 2020-04-19 12:11  奔跑的虫呙牛  阅读(39)  评论(0)    收藏  举报