答:我发现这两个方法的返回类型以及参数类型不一样。
package 汉诺塔问题; /*
*汉诺塔问题
*作者:徐浩军 日期:16.10.16 天气:晴
*/
public class TowersOfHanoi { //用于递归移动盘子 public static void solveTowers( int disks, int sourcePeg, int destinationPeg, int tempPeg ) //第一个参数的意思是盘子的总数,第二个参数的意思是起始盘,第三个参数是目标盘,第四个参数是辅助盘 { // 当只有一个盘子的时候直接从起始盘移动到目标盘 if ( disks == 1 ) { System.out.print( sourcePeg+" -->"+destinationPeg+ " "); return; } // 终止条件
//递归步骤:首先把N-1个盘子从起始盘借助目标盘移动到辅助盘 solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg ); // 把起始盘上的最后一个盘子移动到目标盘上 System.out.print( sourcePeg+" -->"+destinationPeg+ " "); // 从辅助盘上把N-1个盘子移动到目标盘上 solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg ); } // 结束 public static void main( String[] args ) { int startPeg = 1; // 起始盘 int endPeg = 3; // 目标盘 int tempPeg = 2; // 辅助盘 int totalDisks = 3; // 盘子的总数 // 进行移动 solveTowers( totalDisks, startPeg, endPeg, tempPeg ); } // main结束 } //类终止
程序设计思路:
这个问题很明显要用递归的思想来解决问题。
首先定义一个函数用来进行递归操作,
参数有盘子的总数N,起始柱子A,目标柱子B,以及辅助柱子C。
递归实现:先把A上的N-1个盘子移到B上,然后把A上的第N个盘子移到C上,最后把B上的N-1个盘子移到C上,
通过递归,这个问题解决了。
首先终止条件是当只有一个或者零个字符的时候,他是回文的。通过递归,先判断第N个与第一个,在判断第N-1个与第二个。最后就可以解决这个问题。