07 2012 档案

摘要:算法之递归(3)- 链表操作递归(2)尝试了一个单链表的遍历,同时又分析了如何添加自己的操作,是在递归调用之前,还是在递归调用之后。今天,打算将问题深入一下,即添加相应的操作在递归的过程中。(免责声明:下面的解法纯属娱乐 ,另外,示例代码未经编译和调试,许多想法未经实践验证。)查找链表当中倒数第N个... 阅读全文
posted @ 2012-07-31 21:30 Lucas Luo 阅读(1779) 评论(3) 推荐(0)
摘要:算法之递归(2)- 链表遍历在递归(1)中,简单的介绍了递归的思想,并且通过一个例子简单阐述了递归是如何工作的,并且递归的实现是以线性结构来表示的。之所以用线性的,是因为其易于理解;如果使用树结构,将加大对问题的难度,不利于初学者理解递归的思想。为什么用递归关于为什么用递归,我个人的理解是递归不要违背算法的初衷,即期待传入xxx值,加工后返回xxx值。不要为了递归而递归,容易造成对函数语义的奇异。另外,通过递归,可以让代码更加整洁,短小,精湛,优美。当然,还会存在一定程度的性能损耗;不过,合理的使用,对于那部分的损耗可以忽略不计。让我们以单链表为例,理解一下递归是如何工作的。1. 遍历单链表循 阅读全文
posted @ 2012-07-30 21:36 Lucas Luo 阅读(2647) 评论(3) 推荐(3)
摘要:算法之递归(1)最近事情太多了,很少有时间可以完全静下来认真研究一些东西;每当专注的写代码的时候,总是被其他事情打断。还好,礼拜天来了,总算可以抽出一些时间了J《代码之美》第一章有一个关于模式匹配的问题,即根据正则表达式在相应的文本中找到匹配的值,找到返回1,没找到返回0。撇开具体的实现,里面优美的递归调用倒是深深地吸引了我。于是,我开始重新思考递归,毕竟有些细节之前的思考还不够到位。什么是递归我的印象中的递归是函数调用自身来完成预先定义的操作。当然,实际涉及的内容更多,比如退出递归的条件,代码逻辑,参数等等。可以将递归理解为栈,即调用序列是以顺序结构的形式并遵循后进先出的顺序存放在栈中的。举 阅读全文
posted @ 2012-07-29 13:56 Lucas Luo 阅读(1691) 评论(2) 推荐(4)