java代码递归汉罗塔 汉罗塔递归算法( 四 )


if(n1)
{
hanio(n-1, A, C, B);
pause();//停顿几秒在执行
switch(A)
{
case 'A':adisk[n-1] = 0;break;
case 'B':bdisk[n-1] = 0;break;
case 'C':cdisk[n-1] = 0;break;
default:break;
}
switch(C)
{
case 'A':adisk[n-1] = 1;break;
case 'B':bdisk[n-1] = 1;break;
case 'C':cdisk[n-1] = 1;break;
default:break;
}
repaint();
hanio(n-1, B, A, C);
}
pause();
switch(A)
{
case 'A':adisk[n-1] = 0;break;
case 'B':bdisk[n-1] = 0;break;
case 'C':cdisk[n-1] = 0;break;
default:break;
}
switch(C)
{
case 'A':adisk[n-1] = 1;break;
case 'B':bdisk[n-1] = 1;break;
case 'C':cdisk[n-1] = 1;break;
default:break;
}
repaint();
}
/**
*每隔半妙钟移动一个盘子
*/
public void pause()
{
try{
Thread.sleep(500);//可以修改此值加快盘子移动的速度
}catch(InterruptedException e){}
}
}
java递归算法的例子 。阶乘:
要求:给定一个数值,计算出它的阶乘值,例如5的阶乘为5*4*3*2*1
实现:
[html] view plaincopy
span style="font-size:12px;"// 利用递归实现一个数的阶乘值private static BigDecimal getNum(BigDecimal inNum) {if (inNum.compareTo(BigDecimal.ONE) == 0) {return inNum;}return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE)));}/span
(2)Fibonacci数列:1,1,2,3,5,8,13……
要求:找出数列中指定index位置的数值
实现:
[html] view plaincopy
span style="font-size:12px;"// 利用递归实现了Fibonacci数列private static int fab(int index) {if (index == 1 || index == 2) {return 1;} else {return fab(index - 1) + fab(index - 2);}}/span
(3)汉诺塔
要求:汉诺塔挪动
实现:
[html] view plaincopy
span style="font-size:12px;"span style="white-space:pre;" /spanprivate static final String DISK_B = "diskB";span style="white-space:pre;"/spanprivate static final String DISK_C = "diskC";span style="white-space:pre;"/spanprivate static final String DISK_A = "diskA";span style="white-space:pre;"/spanstatic String from=DISK_A;span style="white-space:pre;" /spanstatic String to=DISK_C;span style="white-space:pre;" /spanstatic String mid=DISK_B;span style="white-space:pre;" /spanpublic static void main(String[] args) {span style="white-space:pre;" /spanString input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");span style="white-space:pre;" /spanint num=Integer.parseInt(input);span style="white-space:pre;" /spanmove(num,from,mid,to);span style="white-space:pre;" /span}/span
[html] view plaincopy
span style="font-size:12px;"// 利用递归实现汉诺塔private static void move(int num, String from2, String mid2, String to2) {if (num == 1) {System.out.println("move disk 1 from " + from2 + " to " + to2);} else {move(num - 1, from2, to2, mid2);System.out.println("move disk " + num + " from " + from2 + " to " + to2);move(num - 1, mid2, from2, to2);}}/span
(4)排列组合
要求:将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc",
则程序会输出
abc
acb
bac
bca
cab
cba
实现:
[html] view plaincopy
span style="font-size:12px;"span style="white-space:pre;"/spanpublic static void permute(String str) {span style="white-space:pre;"/spanchar[] strArray = str.toCharArray();span style="white-space:pre;"/span permute(strArray, 0, strArray.length - 1);span style="white-space:pre;" /span}/span
[html] view plaincopy
span style="font-size:12px;"// 利用递归实现,将输入的一个字符串中的所有元素进行排序并输出public static void permute(char[] list, int low, int high) {int i;if (low == high) {String cout = "";for (i = 0; i = high; i++) {cout += list[i];}System.out.println(cout);} else {for (i = low; i = high; i++) {char temp = list[low];list[low] = list[i];list[i] = temp;permute(list, low + 1, high);temp = list[low];

推荐阅读