似乎学校学程序的过程都要经过学习递归这节课,上完课下来,一些简单的递归,例如求阶乘,N个数的和等比较简单的递归会写,可能本人没有什么数学头脑,涉及到例如汉诺塔,数的排列与组合等比较复杂的问题的时候就写不出来了,有时候写不出结束条件,更多时候是写不出递归函数的执行,估计递归这东西永远成为我克服不了的困难了,在这里想请教下大家当时学递归是怎么学的啊?现实编程中用递归用的多么?谢谢~

解决方案 »

  1.   


    现实中用的不少,像windows里的资源管理器的树,从数据库读出来不用递归没法搞,不过大都不是特别复杂
      

  2.   

    沒有人什麼都是一學就會的,熟能生巧,賣油翁也可以耍x(忘了)一把...
    你還是不要先管什麼遞歸的什麼條件不條的,你知道遞歸就是調用自己
    以漢諾塔為例,假如你的函數叫move,那麼你只要知道你想做什麼就可以了,
    move(n - 1, a, c, b) <---由將a塔上的n-1層經c移到b
    pick(n, c) <---將n放到c上
    move(n - 1, b, a, c) <---同上
      

  3.   

    涉及到数据结构几乎必然涉及集合
    涉及到集合又几乎必然涉及到递归
    一个堡垒久攻不下就应该想想怎么包抄它:
    先从递归的周边知识和技能下手:
    数学基础——数学归纳法
    代码方面——栈本身、怎么自己用栈去处理算术表达式
    其他——买个汉诺塔玩具玩玩
    最后——递归语法:
    递归函数(n){
      if(到达递归终止条件){return 最简返回值;}
      else{递归函数(n-1);}
    }
      

  4.   

    在这里顺便问大家一个问题,是学校布置的作业.
       题目其实是要求写一个实现快速排序法的代码,但是跟教材上要求有所不一样,我对题目做了些简化,如下:
       要求用三个方法LESSTHAN(),EQUAL(),MORETHAN()分别找出一个数组中比中间那个数小,等于中间那个数,比中间那个数大的数,并且把找出来的数放到三个不同的数组里面,三个方法的返回值是数组类型,然后最后在QUICKSORT()中用上面那个三个方法,并且递归调用QUICKSORT()这个方法,来实现这个快速排序的算法.
       我思考了一下写出了半个QUICKSORT的方法,如下:
       public int [] Quicksort(int[] f){
          LessThan(f);
          Quicksort(f);
          Equal(f);
          Morethan(f);
          Quicksort(f);
    }   这里我没有写到递归终结条件,这里想请教下大家,应该怎么写才正确,还有,如果撇开终结条件,我这样的递归思想正确吗?谢谢
      

  5.   

    大家看下我发的贴用递归实现人鬼过河小游戏的算法,不过有点问题,希望大家帮忙改下http://topic.csdn.net/u/20081120/08/ed6b4d59-13ad-4e2c-b641-a976e5d35ce7.html