數(shù)據(jù)結(jié)構(gòu)與算法分析的課后習(xí)題編寫帶有下列聲明的例程:public void permute( String str );private void permute( char [] str, int low, int high );第一個(gè)例程是驅(qū)動(dòng)程序,它調(diào)用第二個(gè)例程并顯示String str中的字符的所有排列。如果str是"abc",那么輸出的串則是abc,acb,bac,bca,cab和cba。第二個(gè)例程使用遞歸。答案如下:public class Permute{public void permute ( String str ){ permute (str.toCharArray (), 0, str.length ()); String tmp = new StringBuilder ().append (str).reverse ().toString (); permute (tmp.toCharArray (), 0, tmp.length ());}private void permute ( char[] str, int low, int high ){ if (low == high) { return; } String result = ""; for ( int i = low; i < high; i++ ) { result += str[i]; } if (result.length () < str.length) { int count = str.length - result.length (); for ( int i = 0; i < count; i++ ) { result += str[i]; } } System.out.println (result); permute (str, ++low, high);}public static void main ( String[] args ){ Permute permute = new Permute (); permute.permute ("abc");}}上面的代碼,雖然也是方法自己調(diào)用自身,但感覺permute (str, ++low, high);這樣的調(diào)用其實(shí)用for循環(huán)就能寫出來(lái),這個(gè)應(yīng)該不能算是遞歸吧,求更好的遞歸解法
java 遞歸問(wèn)題
慕碼人8056858
2019-03-13 18:15:24