我们先看一个程序:
这个程序如果空间和时间完全允许的话,完全没有问题,但是,我们注意一下,这里面用了一个递归算法。很不幸,如果这个链表里面含有2000000个元素,甚至2100000个元素,那么就有递归的时候调用2000000个活动记录一个栈。
这样很可能导致系统的内存用尽!从而越出了栈空间。
这个程序叫作尾递归,是使用相当不当的一个例子。下面用goto语句来手动地去除递归,从而使空间需求大大减少。
在这种情况下,比等价的递归程序要快,但是速度快的同时,却由于使用了goto使程序的清晰度变得比较差。