对于递归一直搞不太明白,.以前是做过一些简单的例子,当时那些例子觉得是掌握了,不过概念是模模糊糊的,现在想找人帮我好好解释下,最好是原理,,不是需要针对某个题的递归用法......

解决方案 »

  1.   

    递归通俗的讲就是一个函数在其代码中反复调用自身。你应该知道菲波纳契数列,这个数列的定义是
    f(x)=1 (x=1)
    f(x)=2 (x=2)
    f(x)=f(x-1)+f(x-2) (x>2)
    也就是说从第三项开始的每一项的值都等于是前两项之和。这在数学中叫递推数列--高中数学内容。
    如果把它变为一个要求第n个菲波纳契数的代码的话,应该如下所示(为了避免语言不通:)我使用伪代码):
    int f(int step)
    在这里x为上面所说的x变量,也就是要求的是第x项的值
    {
    if step=1
    {
    return 1
    }
    else if step=2
    {
    return 2
    }
    如果求得是第一项和第二项的话,就分别返回1和2,并退出函数return f(x-1)+f(x-2)
    否则的话就返回前面两项的和
    }
    这里的关键是最后一句。这里函数的返回直又要反过去调用它自身计算前面两项的值,这样就会反复调用,直到x变量在某次调用中变为1和2,返回已知的第一项和第二项的值,在层层返回,最后得出要求的第x项的值
    说到本质的话,递归是一段程序的代码反复效用,把程序的参数等变量保存在一个堆栈里,直到到了边界条件以后再层层返回,将堆栈中的数据弹出计算,最后得到结果
      

  2.   

    首先要搞明白方法的调用原理,方法1调用方法2的时候,方法1要保存现场(方法1的运行状态),然后才进入方法2;方法2执行完毕后(也就是代码执行完,或Return了)方法1恢复现场继续执行。把方法1与方法2想成同一个方法就是递归了。现场的保存与恢复就是采用压栈的方式进行的。
      

  3.   

    集合论中也讨论过这个问题。
    对于一个集合X,其中的一个元素a,定义在X上的函数f,存在唯一的F:N->X(N为自然数集),使得
        F(0)=a
        F(n+1)=f(F(n))
    集合论证明了这样递归定义的函数F存在且唯一
      

  4.   

    http://hi.baidu.com/%CE%A2%D6%D0%BF%C6%BC%BC/blog/item/4eb696249fb4e235c895597b.html这个博客里写了吧
      

  5.   

    也可以说是种嵌套吧,层层调用函数本身,直接符合某种条件有确定的值,再层层返回,就能得到最终的结果!
    举个简单例子,数的阶乘:private static long recursion(int m) {
    long value = 0;
    if(m==1||m==0) value = 1;
    else if(m>1) {
    value = m*recursion(m-1);
    }
    return value;
    }假如当要计算5的阶乘时,输入5,函数就反复调用自身,先计算4的阶乘、3的阶乘、2的阶乘、直到m减到1时,有确定的结果,再开始返回值,2的阶乘的值->3的阶乘的值->4的阶乘的值->5的阶乘的值,最终结果就是这样得到的。
    不知道这样的分析,楼主能否看得懂?
      

  6.   

    但是在有的时候自己不能掉自己啊
    public static int i = 1; public static void diguishouw() {
    System.out.println(i);
    if (i < 5) {
    diguishouw();
    System.out.println("this is recursion" + i);
    i++;
    } } public static void main(String[] args) {
    System.out.println(i);
    diguishouw();
    }
    这样些是不是不对人啊