摘要: 苦思无果之余,某群友发了个帖子给我,我一看,同样是求2点间所有路径的算法,用的是C++和结点栈。想法非常独特,引用了一个线的定义。完美解决了递归改为循环中的路径标记问题。于是本人辛辛苦苦弄了半天终于把递归改为了while循环+结点栈。测试后雷了……花的时间竟然比原来的递归还多一点!我这是何苦来哉、、、其实作者文章开头就已经声明了,效率不高。但没想到比递归还要低,那还不如用递归呢?该帖地址俺就不贴了。下面是改过后的代码。估计是路径标记的判断和更新花费太多时间。看来需要从其他方面下手了。 private LinkedList<Point> paths;//当前键值集合 ... 阅读全文
posted @ 2012-03-18 21:15 妖気 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 1.递归与非递归的区别:递归的代码量比非递归的代码量少,因为非递归需要额外的变量记录当前所处的位置信息,以及额外的控制语句。而递归所使用的方式是函数调用,这是非常自然的栈结构,不需要记录位置信息,不需要添加控制语句,这些工作都由函数调用的特性解决了。递归的执行效率比非递归的执行效率低,因为递归的实质是函数调用,而函数调用必然要进行线程栈空间的分配,记录每一次函数调用前的状态等工作,开销是比较大的。而非递归则不需要进行这些工作。递归与非递归调用最主要区别就是在函数调用上。在计算机的工作方式中,函数调用是以栈结构来实现的,最早调用的函数处于栈底,最晚调用的函数处于栈顶,栈中存放的是每个函数中的局部 阅读全文
posted @ 2012-03-18 12:20 妖気 阅读(9311) 评论(0) 推荐(0) 编辑