我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好
不过也是因为要绕几个弯,所以才会有有意思的东西可写,另外还有我发现把尾递归如果跟JAVA中的GC比对一下,也颇有一些妙处(发现还没有人特地比较过)
(不过后来边写边整理思路,写出来又是另一个样子了)
一、首先我们讲讲递归
既然会导致内存溢出泄露如此,那肯定要想办法了,方法很简单,那就是尾递归优化
二、尾递归优化
举例:
(没有使用尾递归的形式)
def recsum(x):
if x == 1:
return x
else:
return x + recsum(x - 1)
(使用尾递归的形式)
def tailrecsum(x, running_total=0):
if x == 0:
return running_total
else:
return tailrecsum(x - 1, running_total + x)
但不是所有语言的编译器都做了尾递归优化。比如C实现了,JAVA没有去实现
说到这里你很容易联想到JAVA中的自动垃圾回收机制,同是处理内存问题的机制,尾递归优化跟垃圾回收是不是有什么关系,这是不是就是JAVA不实现尾递归优化的原因?
三、所以下面要讲一下垃圾回收(GC)
四、现在我们就可以比较一下尾递归优化和垃圾回收了
最后可以解答一下前头提出的问题
转载:博客园-阁刚广志,地址:http://www.cnblogs.com/bellkosmos/p/5280619.html