数据结构学习(C++)之递归(good)
http://www.yesky.com/90/1736590.shtml

对于递归的一些探讨
http://blog.csdn.net/zongxiong/archive/2006/03/23/635777.aspx
quote:
用递归的程序都可以用迭代(其实也就是循环)的方式代替,而所有的循环程序也都可以改写成递归,这

两者之间的转换只是一个程序设计难度、易读性以及程序执行效率的问题。

如何用栈实现递归与非递归的转换
http://blog.csdn.net/dragondwy/archive/2006/06/30/855391.aspx

递归函数的工作原理!
http://www.oia.com.cn/Web/CSDN/phppost5/php43338.htm
 回复人: yorgo(羽高) ( ) 信誉:99     2002-06-12 13:29:37Z     得分:10
函数调用函数本身

在调用的时候将现有的环境、变量参数压入栈,然后调用函数本身
函数退出的时候,从栈顶取出压入的环境、变量参数,然后完成上一个函数的调用。直到栈为空,函数停

止运行,退出

回复人: dongfangran(东方冉) ( ) 信誉:95     2002-06-13 16:22:25Z     得分:20
    清华大学出的那本〉《数据结构》 上有关栈的那一章用栈把第归说得很详细。不妨看一下。



递归函数内部的原理????不要跟我讲自己调用自己这样的话,我一分也不会给你的
http://www.csdnback.com/ForumsView/t/20020613/12/800443.html

quote:
系统根本就不管你是不是递归函数,他也不可能知道.  
  他只是在有函数调用的时候,把"主程序"的信息压入栈,然后调用函数,执行完后再把"主程序"的信息从

栈里弹出来,恢复.  
  也就是说,递归其实是一种函数调用的"技巧",只不过这种技巧很基本罢了.


呵呵,尽管你不想听到“自己调用自己”这样的话,我还是要说:就是自己调用自己的一个过程。请看下

:  
  void   fun()  
  {  
    ..  
    fun();  
    ..  
  }  
   
    当执行到fun时,发生调用,特别的是这里是调用它本身。在函数的调用处理中,不同的语言会有

不同的处理方式,这一点在编译原理的课程中讲到的比较多,分配策略有:静态分配,栈式分配,堆式分

配三种。  
    在过程执行时,系统使用的一个连续存储块,称为活动记录。我现就C语言的调用特点说一下活动

记录。在C语言中,当发生函数调用时,就产生了一个过程的新的活动记录,这些信息被压入栈中保存,

以便此函数执行完毕时返回时用。当函数返回时,当前记录的内容有:  
   
    | 连接数据 |  
    | 返回地址 |  
    | 动态链  |  
    | 静态链  |  
    | 形式单元 |  
    | 局部数据 |  
       -------  
  针对一个C程序而言,其整体的栈分配方式为:  
   
    | main调用的函数调用的其它函数(包括自己)的活动记录|  
    | main调用的函数的活动记录             |  
    | main的活动记录                  |  
    | 全局数据区                    |  
       ---------------------------   
   
  不知我讲明白了没有?:)


在人工实现递递归函数,并不一定要将现场数据(返回点及参数)放到栈(stack)里,我们完全可以将它们

放在可用空间更大的堆(heap)中。不过由程序自动实现时,则如上各位所说的,一定是放在stack中的

,否则编程时也不会那么容易出现‘stack   overflow'错了。