尽可能用goto代替尾递归

 

1 void PrintList(List L)
2 {
3     if(L!=Null)
4     {
5        PrintElement(L->Element);
6        PrintLisr(L->Next);
7     }               
8 }               
9     

 

 所谓尾递归,就是在函数的最后一行调用原函数,进行递归。这个方法是彻底合法的,可是存在一个问题。函数在调用自身进行递归的时候,包括调用的时候的入口,每个函数的局部变量都是须要保存在寄存器中的,而后会以抽象的方式保存在堆顶部。这一些的工做都是由一个栈来完成,所储存的的信息被称为活动记录,或叫作栈帧。若是递归的次数太多,就有可能致使栈空间被用尽,这是一个致命的错误,程序有可能奔溃而没有明显的说明。函数

  能够用goto 代替尾递归防止这种现象spa

void PrintList(List L)
{
    top:
    if(L!=Null)
    {
        PrintElement(L->Element);
        goto top;
    }
}
相关文章
相关标签/搜索