我记得在Java中使用递归的时候,碰到过几次∵递归深度而导致堆栈溢出的问题。
现在我使用的是C#。①C#里也有和Java类似的限制吗?②我在调用某个递归方法的时候,并没有发生堆栈溢出的问题。但是,递归对执行效率的影响大吗?
比如我现在有一个递归函数foo以及它的非递归实现bar函数。
在C#里分别调用这两个函数,bar的效率是否会明显优于foo?还是和递归深度相关?多谢解答!

解决方案 »

  1.   

    我们写Code时循环深度尽量不超过3层,堆栈操作还是有些影响的.
      

  2.   


    递归是算法 一般和语言没有什麽必然关系
    硬要说区别 
    有的堆栈是自己声明的(比如java c 不用那些类库) 不会主动扩大 只是程序员声明的不好可能会溢出
    有的可以让程序自动适应(比如C# 或者C++用类库等等) 但这样显然效率必会前者低些(毕竟多了很多步骤) 尤其是当算法本身的复杂度和自动适应所需步骤一个数量级的时候更明显(可以差好几倍)
    至于递归算法本身 效率是不高 一般视问题不同会有很多改进办法
      

  3.   

    [h=引用 11 楼 yumichika 的回复:]

    递归是算法 一般和语言没有什麽必然关系
    硬要说区别
    有的堆栈是自己声明的(比如java c 不用那些类库) 不会主动扩大 只是程序员声明的不好可能会溢出
    有的可以让程序自动适应(比如C# 或者C++用类库等等) 但这样显然效率必会前者低些(毕竟多了很多步骤) 尤其是当算法本身的复杂度和自动适应所需步骤一个数量级的时候更明显(可以差好几倍)
    至于递归算法本身 效率是不高 一般视问题不同会有很多改进办法
    [/h1]