1、java 递归的经典例子1。汉诺塔这是递归的超经典的例子,几乎每本程序设计书上谈到递归都会介绍。具体情景不再赘述。以我上述的方法观之:(1)递归的出口在于 disk 数为一的时候(2)向出口逼近:如果不是一,是 n ,则我们先挪动上面 n-1 块 disk,等上面挪完,即递归返回的时候,我们挪动最底下的 disk。仅仅如此,一个貌似十分复杂的问题就解决了,因为挪动那 n-1 块 disk 的时候,会继续向上减少,直到 disk 的数量为一为止。下面给出程序编码(已测试过,运行正常):import javax.swing.JOptionPane;public class Hanoi privat
2、e static final String DISK_B = “diskB“;private static final String DISK_C = “diskC“;private static final String DISK_A = “diskA“;static String from=DISK_A;static String to=DISK_C;static String mid=DISK_B;public static void main(String args) String input=JOptionPane.showInputDialog(“please input the
3、number of the disks you want me move.“);int num=Integer.parseInt(input);move(num,from,mid,to);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
4、+“ from “+from2+“ to “+to2);move(num-1,mid2,from2,to2);2。这是一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是“abc“ 则程序会输出:abcacbbacbcacabcba()算法的出口在于:也就是现在给出的排列元素只有一个时。()算法的逼近过程:先确定排列的第一位元素,也就是循环中所代表的元素,然后开始减少排列元素,如此下去,直到public static void permute(String str) char strArray = str.toCharArray();permute(
5、strArray, 0, strArray.length - 1);public static void permute(char list, int low, int high) int i;if (low = high) String cout = “;for (i = 0; i = high; i+)cout += listi;System.out.println(cout); else for (i = low; i = high; i+) char temp = listlow;listlow = listi;listi = temp;permute(list, low + 1, h
6、igh);temp = listlow;listlow = listi;listi = temp;这是一个组合的例子,与上述的例子相似,只是它所做的工作是,输出所给字符串中制定数目的元素的组合种类()程序出口在于,此时只要输出目标数组的所有元素即可()逼近过程,当 的时候,我们先取第一个元素放入目标数组中,然后,如此下去,最后出来。import javax.swing.JOptionPane;public class Combination /* param args*/public static void main(String args) String input = JOptionPan
7、e.showInputDialog(“please input your String: “);String numString = JOptionPane.showInputDialog(“please input the number of your Combination: “);int num = Integer.parseInt(numString);Combine(input, num);private static void Combine(String input, int num) char a = input.toCharArray();String b = “;Combine(a, num, b, 0, a.length);private static void Combine(char a, int num, String b, int low, int high) if (num = 0) System.out.println(b); else for (int i = low; i a.length; i+) b += ai;Combine(a, num - 1, b, i+1, a.length);b=b.substring(0, b.length()-1);