<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://dengyin2000.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdengyin2000.spaces.live.com%2fcategory%2f%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e5%92%8c%e7%ae%97%e6%b3%95%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Java Dreams: 数据结构和算法</title><description /><link>http://dengyin2000.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%25E6%2595%25B0%25E6%258D%25AE%25E7%25BB%2593%25E6%259E%2584%25E5%2592%258C%25E7%25AE%2597%25E6%25B3%2595</link><language>en-US</language><pubDate>Sat, 02 Aug 2008 01:08:53 GMT</pubDate><lastBuildDate>Sat, 02 Aug 2008 01:08:53 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://dengyin2000.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-5815636772130029849</live:id><live:alias>dengyin2000</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>《Java软件结构：设计和使用数据结构（第2版）》读书笔记1－递归</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!170.entry</link><description>&lt;div&gt;
&lt;p align=center&gt;&lt;span style="font-family:宋体"&gt;《&lt;/span&gt;&lt;span lang=EN-US&gt;Java&lt;/span&gt;&lt;span style="font-family:宋体"&gt;软件结构：设计和使用数据结构（第&lt;/span&gt;&lt;span lang=EN-US&gt;2&lt;/span&gt;&lt;span style="font-family:宋体"&gt;版）》读书笔记&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;－递归&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;大学的数据结构和算法根本就是混过来的，某天在某某论坛里有个关于数据结构和算法到底在日常的编程到底有多大的用处。对于我来说，我并不觉得我用上了那些讲的数据结构和算法。&lt;/span&gt;&lt;span lang=EN-US&gt;Java Collection Framework&lt;/span&gt;&lt;span style="font-family:宋体"&gt;已经跟我们做了这些。我已经能非常熟练的使用&lt;/span&gt;&lt;span lang=EN-US&gt;Collection&lt;/span&gt;&lt;span style="font-family:宋体"&gt;里面的类库。但是我们用的基本上都是那些线性集合（堆栈，队列，列表，&lt;/span&gt;&lt;span lang=EN-US&gt;Set&lt;/span&gt;&lt;span style="font-family:宋体"&gt;），非线性集合（树，堆，散列和图）我感觉比较少用到。我也主要是想对非线性集合做一些比较。线性集合比较简单。&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;第一章到第九章都是讲线性集合，&lt;/span&gt; &lt;span style="font-family:宋体"&gt;也比较容易理解，&lt;/span&gt; &lt;span style="font-family:宋体"&gt;在这里就忽略掉。第十章是讲递归算法。我对这章比较感兴趣，用递归实现某个算法真的感觉非常优雅，代码短而少，许多非线性集合都是用递归来实现的。但也有他的缺点，&lt;/span&gt; &lt;span style="color:red;font-family:宋体"&gt;对方法的每次递归调用都会生成新的局部变量和局部参数。&lt;/span&gt;&lt;span style="font-family:宋体"&gt;假如递归层次太多的话，就会消耗太多的&lt;/span&gt;&lt;span lang=EN-US&gt;stack&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="color:red;font-family:宋体"&gt;任何递归定义都必须有一个非递归部分；这个非递归部分叫做基本情况，它使的递归跳出无穷循环递归。&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt;Ex 1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：&lt;/span&gt;&lt;span lang=EN-US&gt; 1~N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的累加过程，数值&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;～&lt;/span&gt;&lt;span lang=EN-US&gt;N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的累加可以看成是&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;～&lt;/span&gt;&lt;span lang=EN-US&gt;N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;－&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的累加加上&lt;/span&gt;&lt;span lang=EN-US&gt;N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; 
&lt;div&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;span style="color:#000000"&gt;       &lt;/span&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; sum(&lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; num)&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img height=20 src="http://blogjava.net/Images/dot.gif" width=15&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; result &lt;/span&gt;&lt;span style="color:#000000"&gt;=&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt; (num &lt;/span&gt;&lt;span style="color:#000000"&gt;==&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                     &lt;/span&gt;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;              }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt;&lt;span style="color:#000000"&gt; result &lt;/span&gt;&lt;span style="color:#000000"&gt;+&lt;/span&gt;&lt;span style="color:#000000"&gt; num &lt;/span&gt;&lt;span style="color:#000000"&gt;+&lt;/span&gt;&lt;span style="color:#000000"&gt; sum(num &lt;/span&gt;&lt;span style="color:#000000"&gt;-&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;       }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/span&gt;
&lt;p&gt;
&lt;p&gt;&lt;span lang=EN-US&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;这里的基本情况就是但&lt;/span&gt;&lt;span lang=EN-US&gt;num&lt;/span&gt;&lt;span style="font-family:宋体"&gt;＝＝&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的时候。&lt;/span&gt; &lt;span style="font-family:宋体"&gt;当然这个可以不用递归来处理，用一个&lt;/span&gt;&lt;span lang=EN-US&gt;for&lt;/span&gt;&lt;span style="font-family:宋体"&gt;就行了（而且比用递归更直观）。我们必须能判断什么时候使用递归，什么时候不使用递归，所有问题都可以使用迭代（&lt;/span&gt;&lt;span lang=EN-US&gt;for&lt;/span&gt;&lt;span style="font-family:宋体"&gt;循环）解决问题。不过有些情况下，迭代方式过于复杂，对某些问题，递归可以写出短小而优雅的代码。&lt;/span&gt;
&lt;p&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="font-family:宋体"&gt;直接递归和间接递归，方法调用自己，这就是直接递归（如上个例子）。方法调用另一个方法，最终导致再调用原方法。这就是间接递归。&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="font-family:宋体"&gt;河内塔问题（&lt;/span&gt;&lt;span lang=EN-US&gt;Towers of Hanoi&lt;/span&gt;&lt;span style="font-family:宋体"&gt;）（可以上网找找这个经典问题的描述）&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family:宋体"&gt;规则：&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;一次只能移动一张圆盘&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;不能将大盘放在小盘的上方&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;除了那张在柱子之间搬动的圆盘之外，所有圆盘都必须在某根柱子上&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="font-family:宋体"&gt;策略：&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;将最上方的&lt;/span&gt;&lt;span lang=EN-US&gt;N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;－&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;张圆盘从最初的柱子移到那根多处的柱子上&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;将最大的圆盘从最初的柱子移动到最终的柱子上&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US style="font-family:Wingdings"&gt;&lt;span style=""&gt;l&lt;span style="font:7pt 'Times New Roman'"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;再将那个多出柱子上的&lt;/span&gt;&lt;span lang=EN-US&gt;N&lt;/span&gt;&lt;span style="font-family:宋体"&gt;－&lt;/span&gt;&lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:宋体"&gt;张圆盘移到最终的柱子上&lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt; &lt;/span&gt;
&lt;p&gt;&lt;span lang=EN-US&gt;Code&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：&lt;br&gt;
&lt;div&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt;&lt;span style="color:#000000"&gt;      &lt;/span&gt;&lt;span style="color:#0000ff"&gt;class&lt;/span&gt;&lt;span style="color:#000000"&gt; TowersOfHanoi&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; totalDisks;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; ------------------------------------------------------&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; Sets up the puzzle with the specified number of disks&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; ------------------------------------------------------&lt;/span&gt;&lt;span style="color:#008000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt;&lt;span style="color:#000000"&gt; TowersOfHanoi(&lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; disks)&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                     &lt;/span&gt;&lt;span style="color:#0000ff"&gt;this&lt;/span&gt;&lt;span style="color:#000000"&gt;.totalDisks &lt;/span&gt;&lt;span style="color:#000000"&gt;=&lt;/span&gt;&lt;span style="color:#000000"&gt; disks;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;              }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; ----------------------------------------------------------&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; Performs the initial call to moveTower to solve the puzzle.&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; Moves the disks from tower 1 to tower 3 using tower 2&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; ----------------------------------------------------------&lt;/span&gt;&lt;span style="color:#008000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt;&lt;span style="color:#000000"&gt; solve()&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                     moveTower(totalDisks, &lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;, &lt;/span&gt;&lt;span style="color:#000000"&gt;3&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;span style="color:#000000"&gt;2&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;              }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; -----------------------------------------------------------------&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; Moves the specified number of disks from one tower to another by &lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; moving a subtower of n-1 disks out of the way, moving one disk, &lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; then moving the subtower back, Base case of 1 disk.&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#008000"&gt;//&lt;/span&gt;&lt;span style="color:#008000"&gt; -----------------------------------------------------------------&lt;/span&gt;&lt;span style="color:#008000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt;&lt;span style="color:#000000"&gt; moveTower(&lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; numDisks, &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; start, &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; end, &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; temp) &lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;                     &lt;/span&gt;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt; (numDisks &lt;/span&gt;&lt;span style="color:#000000"&gt;==&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                            moveOneDisk(start, end);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;                     }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                            moveTower(numDisks&lt;/span&gt;&lt;span style="color:#000000"&gt;-&lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;, start, temp, end);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                            moveOneDisk(start, end);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                            moveTower(numDisks&lt;/span&gt;&lt;span style="color:#000000"&gt;-&lt;/span&gt;&lt;span style="color:#000000"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;, temp, end, start);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;                     }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;              }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;              &lt;/span&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#0000ff"&gt;void&lt;/span&gt;&lt;span style="color:#000000"&gt; moveOneDisk(&lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; start, &lt;/span&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt;&lt;span style="color:#000000"&gt; end) &lt;/span&gt;&lt;span style="border-right:#808080 1px solid;border-top:#808080 1px solid;display:none;border-left:#808080 1px solid;border-bottom:#808080 1px solid;background-color:#ffffff"&gt;&lt;img src="http://blogjava.net/Images/dot.gif"&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color:#000000"&gt;{&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;                     System.out.println(&lt;/span&gt;&lt;span style="color:#000000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;Move one disk from &lt;/span&gt;&lt;span style="color:#000000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;+&lt;/span&gt;&lt;span style="color:#000000"&gt; start &lt;/span&gt;&lt;span style="color:#000000"&gt;+&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt; to &lt;/span&gt;&lt;span style="color:#000000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt; &lt;/span&gt;&lt;span style="color:#000000"&gt;+&lt;/span&gt;&lt;span style="color:#000000"&gt; end);&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;              }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;       }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000"&gt;&lt;br&gt;&lt;img src="http://blogjava.net/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e3%80%8aJava%e8%bd%af%e4%bb%b6%e7%bb%93%e6%9e%84%ef%bc%9a%e8%ae%be%e8%ae%a1%e5%92%8c%e4%bd%bf%e7%94%a8%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%ef%bc%88%e7%ac%ac2%e7%89%88%ef%bc%89%e3%80%8b%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b01%ef%bc%8d%e9%80%92%e5%bd%92&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!170.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!170.entry</guid><pubDate>Sun, 12 Mar 2006 04:32:32 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!170/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!170.entry#comment</wfw:comment><dcterms:modified>2006-03-12T04:32:32Z</dcterms:modified></item></channel></rss>